私はこれに沿ってクエリを持っています:
SELECT * FROM posts WHERE owner_id IN (SELECT owner_id FROM owners_list WHERE user_id = 1) ORDER BY modified DESC
同等の最も効率的な Cake 検索呼び出しは何ですか? ありがとう!
私はこれに沿ってクエリを持っています:
SELECT * FROM posts WHERE owner_id IN (SELECT owner_id FROM owners_list WHERE user_id = 1) ORDER BY modified DESC
同等の最も効率的な Cake 検索呼び出しは何ですか? ありがとう!
あなたは2つの検索でそれを行うことができます. owner_list テーブルのモデル名は OwnersList であると仮定します。
$user_ids = $this->OwnersList->find('list', array(
'fields'=>array('id','id'),
'conditions'=>array(
'OwnersList.user_id'=>1
)
));
$results = $this->Post->find('all',array(
'Post.owner_id'=>$user_ids
));
3つの選択肢:
1) 複雑ですが、Cake はサブクエリを処理します: http://book.cakephp.org/2.0/en/models/retriving-your-data.html#sub-queries
例があるSOの質問は 次のとおりです。
2) 結合ステートメントを使用します: http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#joining-tables
3)最初にサニタイズする限り、Model::query()経由でクエリをそのまま使用できます
エラーが発生しにくく、サニタイズ/エスケープについて心配する必要がないため、オプション2を好みます。ジョインのコツをつかめば、より頻繁にジョインを使用していることに気付くでしょう。