如何在laravel中使用原始查询编写以下雄辩的查询代码?



我雄辩的质问:

$data = (new Model())->whereDate('start_date', '<=', Carbon::today())
->whereDate('end_date', '>=', Carbon::today())
->count();

我尝试过的原始查询:

$data = (new Model())->select(DB::raw("COUNT(id) as countData where date(start_date) <= NOW() and date(end_date) >= NOW()"))->get();

我如何将我的雄辩查询写成原始查询。下面的原始查询给出了语法冲突错误;

这是因为您是如何构造查询的。如果你检查生成的SQL语句,你会看到SQLFROM子句实际上是在语句的末尾,而不是在它应该在的地方。

您将需要拆分WHERE子句并使用wherewhereRaw。例如:

$data = (new Model)->select(DB::raw('COUNT(id) as countData'))
->whereRaw('date("start_date") <= NOW() AND date("end_date") >= NOW()')
->get();

你的问题有点不清楚,但是如果你想在原始查询中做你所做的事情,请注意选择函数,所以只需在select中编写查询功能:

$tableName = (new Model)->getTable();
$data = DB::select("
SELECT COUNT(`id`) as `countData` FROM `$tableName`
WHERE DATE(`start_date`) <= NOW() AND DATE(`end_date`) >= NOW()
")->first();

也可以使用whereRaw模型的功能:

$data = Model::whereRaw(
"DATE(`start_date`) <= NOW() AND DATE(end_date) >= NOW()"
)->count();

最新更新