首页 > 解决方案 > 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 -
-----------------------------

标签: laraveleloquent

解决方案


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

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

推荐阅读