Laravel 6使用不同的where子句查询同一张表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 6使用不同的where子句查询同一张表相关的知识,希望对你有一定的参考价值。

我有campaign_report像这样的表

Schema::create('campaign_report', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->date('report_date');
    $table->bigInteger('user_id');
    $table->bigInteger('campaignId');
    $table->double('cost',12,2);
    $table->timestamps();
});

我正在尝试获取昨天所有的广告系列报告。

        $campaignReports = CampaignReport::where(['report_date' => "$yesterday", 'user_id' => Auth::user()->id])->orderBy('report_date', 'desc')->paginate(25);

以上查询将返回report_date等于$ yesterday的所有广告系列。

与此查询一起,我还想获取每个广告系列的cost值,其中report_date是前天与campaignId列匹配的值。我想显示昨天的活动与前一天的活动之间的cost差异。

like

foreach($campaignReports as $campaignReport)
{
    $difference = $campaignReport->cost - $campaignReport->dayBeforeYesterdayCost; 
}

任何人都可以帮助我使用查询生成器或Eloquent构建此查询吗?

答案

您可以在CampaignReport模型中编写一个关系,以计算昨天的成本与前一天的成本之间的差

public function lastDayDifference() {
     $difference = $this->cost - $this->dayBeforeYesterdayCost; 
     return $difference;
}

现在您可以像这样返回具有$campaignReports关系的lastDayDifference

 $campaignReports = CampaignReport::where(['report_date' => "$yesterday", 'user_id' => Auth::user()->id])
->with('lastDayDifference')
->orderBy('report_date', 'desc')
->paginate(25);

最后,每个$campaignReport上都有一个对象附加在对象上>

另一答案

按日期分组(报告日期),它将只为您提供日期部分,按相同的降序排列,然后只取昨天和前一天的值。

以上是关于Laravel 6使用不同的where子句查询同一张表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

Laravel - 使用“with”和“where”子句进行选择的查询

在 laravel 查询构建器中使用多个 where 子句

来自给定数组的查询中的 Laravel 多个 where 子句

如何在 Laravel 中 MySQL 查询的 where 子句中使用数组 [重复]