繁体   English   中英

Laravel Left在关系表中加入了闭包联接

[英]Laravel leftJoin with closure join in relational table

表:

- salon_clients: id, salon_id, client_id
- clients: id, name, phone
- client_calls: id, salon_id, phone

动态变量: $salonID

逻辑(文本):

我需要根据salon_id和电话参数接听来自特定沙龙的client_calls的所有电话,在客户表中通过电话进行leftjoin以获取客户名称(如果存在匹配项),并且在leftjoin闭包中执行innerjoin以检查是否客户端通过client.id = salon_clients.client_id匹配该沙龙中的salon_client表,其中user_id = $ userID。

逻辑(代码):

return ClientCall::leftJoin('clients', function($query) use ($salonID){
        $query->on('client_calls.phone', 'clients.phone');

        $query->join('salon_clients', function($query) use ($salonID){
            $query->on('clients.id', 'salon_clients.client_id');
            $query->where('salon_clients.salon_id', $salonID);
        });
    })
    ->where('client_calls.salon_id', $salonID)
    ->orderBy('client_calls.created_at', 'DESC')
    ->select(
        'client_calls.*',
        'clients.name'
    )
    ->get();

返回:

[
    {
        "id": 5,
        "salon_id": 1,
        "phone": "0746707241",
        "type": "missed",
        "created_at": "2018-09-02 10:36:45",
        "updated_at": "2018-09-02 10:39:32",
        "name": 'Test client',
    }
]

问题是测试客户端不属于salon_id 1(在这种情况下,名称应为NULL)。 因此,只需简单地传递条件的innerjoin +。

我想念什么吗? 再次感谢你的帮助!

尝试这个

return ClientCall::leftJoin('clients', function($query) use ($salonID){
    $query->on('client_calls.phone', 'clients.phone');
})
->join('salon_clients', function($query) use ($salonID){
        $query->on('clients.id', 'salon_clients.client_id');
        $query->where('salon_clients.salon_id', $salonID);
})
->where('client_calls.salon_id', $salonID)
->orderBy('client_calls.created_at', 'DESC')
->select(
    'client_calls.*',
    'clients.name'
)
->get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM