動的に生成された要素を含む大規模なクエリの一部として、左結合とカウントを行う必要があります。これは私が必要とするクエリです。
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
、関係に関連するコードのようです。
Client と ClientTest の間のリレーションシップを定義するhasMany
と、左側の結合の構築が処理されますが、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 を手動で作成する必要がありますか?