【问题标题】:Laravel eloquent join with last recordLaravel 雄辩加入最后一条记录
【发布时间】: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 -
-----------------------------

【问题讨论】:

    标签: laravel eloquent


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-11
      • 2018-02-14
      • 2017-10-17
      • 2020-05-30
      • 1970-01-01
      • 2021-12-18
      • 2015-08-08
      • 1970-01-01
      相关资源
      最近更新 更多