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

问题描述 投票:0回答:2

我有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构建此查询吗?

php mysql laravel laravel-6 laravel-query-builder
2个回答
0
投票

您可以在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上都有一个对象附加在对象上>


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.