Таблица:
- salon_clients: id, salon_id, client_id
- clients: id, name, phone
- client_calls: id, salon_id, phone
Динамическая переменная: $salonID
Логика (текст):
Мне нужно принять все вызовы из client_calls для определенного салона на основе параметров salon_id и телефона, выполнить левое соединение по телефону в таблице клиентов, чтобы взять имя клиента в случае совпадения, а также при закрытии левого соединения выполнить внутреннее соединение с проверьте, совпадает ли клиент с таблицей salon_client из этого салона с помощью clients.id = salon_clients.client_id, где 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();
Return:
[
{
"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 в этом случае). Итак, внутреннее соединение +, где условие просто переходит.
Я что-то упустил?
Еще раз спасибо за вашу помощь!