У меня есть три таблицы customers
, organizations
и contacts
. Таблица customers
таблица имеет столбцы customer_class
(класс указывает на использование таблицы Organization
, Contact
) и customer_id
(соответствует столбцу id
в любом organizations
или contacts
).Laravel Условно соединять таблицы по указанному классу
Так что я сделал
$interactions = DB::table('sales_interactions')
->join('customers', 'customers.id', '=', 'sales_interactions.customer_id')
->join('organizations', function($join)
{
$join->on('customers.customer_id', '=', 'organizations.id')
->where('customers.customer_class', '=', 'Organization');
})
->join('contacts', function($join)
{
$join->on('customers.customer_id', '=', 'contacts.id')
->where('customers.customer_class', '=', 'Contact');
})
->select([
'organizations.title as customer',
'contacts.name as customer',
'sales_interactions.id',
'sales_interactions.created_at',
'sales_interactions.title',
'status',
'deadline',
'value',
]);
Он работал, когда я присоединился только организации. Но соединение контактов возвращает нулевые результаты.
Хорошо, я переделал свою запись с объединением, которое вам нужно ... –
Да, проблема в том, что я всегда ищу сложные способы сделать вещи :) Я пытался выработать что-то вроде 'JOIN ((SELECT organization.title AS клиент из организаций, где customers.customer_class = 'Организация') UNION (SELECT contacts.name AS клиент FROM клиентов, где customers.customer_class = 'Contact')) ', но ваш должен работать нормально, и это все, что вопросы. Благодаря!!! –
Followup - я подаю комбинированный запрос в 'Datatables :: of ($ interactions) ...', когда он пытается запросить все столбцы, я получаю ошибку '1054 Unknown column 'customer' в 'where clause'' –