Я пытаюсь добавить оператор Case к разрабатываемому запросу.В одно из объединений мне нужно добавить условие, по каким полям присоединяться.1. Если field1 не является нулевым, используйте его 2. Иначе, если используйте field2, если не нулевое 3. В противном случае используйте fallbackField.
У меня есть рабочий запрос, использующий только sql.Но хочу преобразовать это.У меня также есть настройка множественных объединений (просто нужно условное в одном)
Необработанный sql, который работает
SELECT *
FROM customers c
INNER JOIN member_customers mc
ON c.id = mc.customer_id
INNER JOIN enums e
ON CASE
WHEN e.source_id IS NOT NULL
AND mc.id = e.source_id THEN 1
WHEN e.org_id IS NOT NULL
AND c.org_id = e.org_id THEN 1
ELSE e.enum_name = 'Sold'
END = 1
INNER JOIN enum_values ev
ON e.id = ev.enum_id
AND mc.state = ev.enum_value
WHERE mc.user_id = 999
GROUP BY c.NAME
Преобразование Cake, которое у меня до сих пор
$query = $this->Customers->MemberCustomers->find('all')
->contain(['Customers'])
->join([
'c' => [
'table' => 'customers',
'type' => 'LEFT',
'conditions' => 'c.id = MemberCustomers.customer_id'
],
'e' => [
'table' => 'enums',
'type' => 'LEFT',
'conditions' => '//where the conditions need to be'
],
'ev' => [
'table' => 'enum_values',
'type' => 'LEFT',
'conditions' => 'e.id = ev.enum_id AND MemberCustomers.state = ev.enum_value'
]
])