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”子句进行选择的查询