其中条件为否定左联接

kpbpu008  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(305)

我目前使用了以下代码:

CustomerSource::leftJoin("booking", "booking.customer_source_id", "=", "customer_source.id")
->selectRaw("customer_source.text, count(booking.id) as count")
->groupBy("text")
->where([
    ["booking_date", ">=", $from],
    ["booking_date", "<=", $to],
])->get()

$to和$from是约会对象。
我需要查询,以便它统计每个客户源在某个日期范围内的预订数量。
当我删除where条件时,它会列出所有客户源,以及它应该列出的预订计数(有些可以是0),但是当我包含where条件时,它会将查询视为一个内部连接,并且任何在该日期段没有任何相关预订的客户源都不在结果集中。
请你帮我弄清楚这个问题好吗?

p8h8hvxi

p8h8hvxi1#

通过使用wherebetween()和输入日期,您可能可以获得所需内容:

CustomerSource::leftJoin("booking", "booking.customer_source_id", "=", "customer_source.id")
  ->selectRaw("customer_source.text, count(booking.id) as count")
  ->groupBy("text")
  ->whereBetween('booking_date', [$from, $to])
  ->get();
disbfnqx

disbfnqx2#

使用左连接闭包修复。

CustomerSource
::leftJoin("booking", function ($join) use ($from, $to){
    $join->on("booking.customer_source_id", "=", "customer_source.id")
        ->whereBetween("booking_date", [$from, $to]);
})
->selectRaw("customer_source.text, count(booking.id) as count")
->groupBy("text")
->get()

相关问题