作为具有动态生成元素的更大查询的一部分,我需要进行左连接和计数。这是我需要的查询。
SELECT slug, name, count(client_tests.id) AS test_count
FROM clients
LEFT JOIN client_tests ON clients.id = client_tests.client_id
GROUP BY clients.id;
我尝试构建一个连接查询,但 Lithium 似乎期望连接成为关系的一部分(未定义任何关系),如下所示(暂时忽略计数)。
$join = new Query(array(
'source' => 'client_tests',
'model' => '\app\models\ClientTest',
'type' => 'LEFT',
'constraint' => array('Client.id' => 'ClientTest.client_id'),
));
$clients = Client::all(array(
'conditions' => $conditions,
'group' => 'Client.id',
'joins' => array($join)
));
这导致Notice: Undefined index: ClientTest in /usr/local/www/oars/libraries/lithium/data/collection/RecordSet.php on line 340
,这似乎是与关系相关的代码。
如果我确实定义了hasMany
Client 和 ClientTest 之间的关系,它将为我处理构建左连接,有没有办法获取 Client 字段和计数?
$clients = Client::all(array(
'fields' => array('slug', 'name', 'count(ClientTest.test_id) as test_count'),
'conditions' => $conditions,
'group' => 'Client.id',
'with' => 'ClientTest'
));
这导致( ! ) Notice: Undefined index: count(ClientTest in /usr/local/www/oars/libraries/lithium/data/source/Database.php on line 650
,所以要么不可能,要么我使用了错误的语法。
我可以直接使用 直接发出查询Client::connection()->read($sql)
,但是由于查询中有动态元素,所以无论如何我都必须构建 SQL。
有没有办法让上述方法起作用,还是我应该手动构建 SQL?