【发布时间】:2019-03-29 15:23:43
【问题描述】:
我正在尝试将 Case 语句添加到我正在开发的查询中。在其中一个连接上,我需要添加一个条件来确定要连接的字段。 1. 如果 field1 不为空,则使用它 2. else if 使用 field2 if not null 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'
]
])
【问题讨论】:
标签: cakephp cakephp-3.0