laravel - Laravel 雄辩加入最后一条记录
问题描述
我有 4 个表:sales、sales_details、products & price。对于每个销售我都有详细信息,详细信息表包含与产品的关系,并且每个产品都有许多价格(常规,销售)。
销售 ->(有很多)销售详情 ->(每个销售详情都有一个)产品 ->(有很多)价格。
我想在 jquery 数据表中显示选定的销售:product_name、(last)sale_price、(last)regular_price
-------------------------
- sales -
-------------------------
- id | int -
- name | varchar -
- created_at | datetime -
- updated_at | datetime -
-------------------------
-------------------------
- sales_details -
-------------------------
- id | int -
- sale_id | int -
- product_id | int -
- created_at | datetime -
- updated_at | datetime -
-------------------------
-------------------------
- products -
-------------------------
- id | int -
- name | varchar -
- created_at | datetime -
- updated_at | datetime -
-------------------------
----------------------------
- prices -
----------------------------
- id | int -
- product_id | int -
- sale_price | int -
- regular_price | int -
- created_at | datetime -
- updated_at | datetime -
-----------------------------
解决方案
我找到了这个解决方案,它对我有用:
$lists = Product::addSelect([
'sale_price' => Price::select('sale_price')->whereColumn('product_id', 'products.id')->orderBy('id', 'desc')->limit(1),
'regular_price' => Price::select('regular_price')->whereColumn('product_id', 'products.id')->orderBy('id', 'desc')->limit(1),
'sales.id as sale_id',
'sales.name as sale_name',
'sales.active as sale_active',
'sales.start as sale_start',
'sales.end as sale_end',
'sale_details.id as sale_details_id',
'sale_details.active as sale_details_active',
'products.id as product_id',
'products.name as product_name',
'products.slug as product_slug',
\DB::raw("CONCAT(products.name, ' - ', products.slug) as product"),
])
->leftjoin('sale_details', 'sale_details.product_id', '=', 'products.id')
->leftjoin('sales', 'sales.id', '=', 'sale_details.sale_id')
->where('sales.id', '=', $id);
$datatables = DataTables::of($lists);
return $datatables->make(true);
推荐阅读
- javascript - 在 each() 中循环并结合 prepend()
- python - 将一些数据与熊猫合并
- mapkit - MapKit如何在选择注释时选择退出集群
- vuejs2 - 如何测试需要对子源事件做出反应的 Vue 组件?
- coq - 使用 ssreflect 进行子类型化
- java - 务实地允许用户选择将运行哪些 JUnit 测试类
- java - 修改对象的实例数据的任何东西都被认为是突变体,还是突变体这个术语比这更具体?
- influxdb - 创建 Kapacitor 警报错误
- php - 无法找到数据未从数据库中删除的原因
- powershell - Get-ADUser -Properties 不为所有用户返回 PasswordNeverExpires