Laravel查询默认0,如果没有找到结果



我正在制作一个显示活动结果的仪表板。要做到这一点,我有一个这样的查询:

$list = DB::table('campaigns')->leftJoin('campaigns_products_results', 'campaigns_products_results.campaign_id', '=', 'campaigns.id');

但是当没有活动结果时,我仍然想显示0。为此,我使用以下命令:

$list->select('campaigns.*', DB::raw('(CASE WHEN campaigns_products_results.total_views IS NULL THEN 0 ELSE SUM(campaigns_products_results.total_views) END) AS total_views'));

到目前为止一切正常,但现在我想添加一个过滤器来定义结果的日期范围。例如,昨天或7天前。我正在考虑这个,但随后查询结果为空,将没有数据。

$list = $list->whereDate('campaigns_products_results.created_at', Carbon::yesterday());

有一个简单的方法:

->whereBetween('created_at', $date_range)

Where$date_range array如下所示:

[
"2021-08-23",
"2021-08-30",
]

你可以这样写:

->whereBetween('created_at', [
(new Carbon)->subDays(7)->startOfDay()->toDateString(),
(new Carbon)->now()->endOfDay()->toDateString()
])

相关内容

最新更新