Laravel 雄辩加入最后一条记录

Posted

技术标签:

【中文标题】Laravel 雄辩加入最后一条记录【英文标题】:Laravel eloquent join with last record 【发布时间】:2021-05-07 14:51:44 【问题描述】:

我有 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 -
-----------------------------

【问题讨论】:

【参考方案1】:

我找到了这个解决方案,它对我有用:

$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);

【讨论】:

以上是关于Laravel 雄辩加入最后一条记录的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 雄辩加入 ajax

Laravel 雄辩 - 加入表时防止覆盖值

Laravel orderby 加入 2 个没有雄辩关系的表

在laravel [实现过滤器]中将多个表与雄辩和急切的加载一起加入

Laravel 5 具有雄辩的关系回调函数返回错误记录

试图获取每个连接记录都处于非活动状态的外键记录(Laravel 雄辩查询)