Laravel 连接 3 table 和 select 原始总和

Laravel join 3 table and select raw sum

我在 Laravel 项目中有 3 tables

第一个table“优惠”

id client numer_offer id_user
1 123 211/2022 11
2. 145 212/2022 23

第二个table“客户”

id name adres
123 Mark 211/2022
145 Ben 212/2022.

最后一个table“offer_items”

id id_offer product amount
1 2 bags 14.56
2 2 bags2 16.50

并有疑问:

  $id_user = '11';
  $offers = Offer::join('clients', 'clients.id', '=', 'offers.client')
  ->join('offer_items','.offer_items.id_offer', '=', 'offers.id')
  ->selectRaw(' sum(offer_items.amount) as suma, clients.name, offers.*')
  ->where('offers.id_user', $id_user)
  ->groupBy('offer_items.id_offer')
  ->Orderby('offers.id_offer')
  ->get();

如果我在“offer_items”中有记录,查询工作正常,但如果我在 table 中没有记录,则没有任何显示,我希望显示所有内容和数量= 0.

不知道,因为昨天我一整天都没睡 :(

在加入 offer_items 时使用 leftJoin 而不是 join 来检索数据是否在 offer_items 上有记录,我还添加了 IFNULL将 null 视为 0

$id_user = '11';
 $offers = Offer::join('clients', 'clients.id', '=', 'offers.client')
      ->leftJoin('offer_items','offer_items.id_offer', '=', 'offers.id')
      ->selectRaw(' sum(IFNULL(offer_items.amount,0)) as suma, clients.name, offers.*')
      ->where('offers.id_user', $id_user)
      ->groupBy('offers.id')
      ->Orderby('offers.id')
      ->get();

有关 different type of join , Mysql IFNULL

的更多详细信息