php - 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
喜欢
foreach($campaignReports as $campaignReport)
{
$difference = $campaignReport->cost - $campaignReport->dayBeforeYesterdayCost;
}
谁能帮助我使用 Query Builder 或 Eloquent 构建此查询?
解决方案
您可以在CampaignReport
模型中编写一个关系来计算昨天成本和前一天之间的差异
public function dayBeforeYesterdayCost() {
$dayBeforeYesterday = Carbon::parse($this->report_date)->subDays(1); //return date of day before yesterday
$dayBeforeYesterdayCost = CampaignReport::where('campaignId', $this->campaignId)
->where('report_date', $dayBeforeYesterday)
->first();
return $dayBeforeYesterdayCost ? $dayBeforeYesterdayCost->cost : 0;
}
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
推荐阅读
- dataweave - 基于“是否存在密钥”的 Dataweave 转换
- javascript - 对于以下代码,如何解决 react-native 和 nodejs 中的 Unexpected EOF 错误?
- c++ - 无法转换 std::reference
到 std::reference 在铿锵 - python - RabbitMQ 交换在一段时间后变得无响应
- reactjs - 如何将文本输入集中在过渡端?
- git - 项目继续时合并目录更改
- c# - 如何在不重定向到 Blazor Server 应用程序中的 cshtml 页面的情况下刷新我的身份验证 cookie
- javascript - 如何获取以 MySQL 开头的数据
- typescript - MiniCSSExtractPlugin - 模块解析失败。SCSS 编译期间出现意外字符“”
- php - Magento 2 任务“更新 x 选定产品的属性”:x 项当前正在更新。x 项已安排更新