私は3つのモデルを持っています
MktingCampaign
Campaign
IvrNumber
MktingCampaign
hasManyCampaign
とCampaign
hasOne IvrNumber
。
このクエリをエミュレートしようとしています -
select * from mkting_campaign
join campaign on mkting_campaign.id = campaign.mkting_campaign_id
join ivr_numbers on campaign.id = ivr_numbers.campaign_id
where campaign.status = 1 and ivr_numbers.status = 0;
それがすることは、mkting_campaigns を取得することですcampaigns.status = 1 and ivr_numbers.status = 0
。
私はこれを書いた、
$this->MktingCampaign->find('all',array(
'contain' => array(
'Campaign' => array(
'conditions' => array('Campaign.status' => 1),
'IvrNumber' => array(
'conditions' => array(
'IvrNumber.status' => 0
)
)
)
)
));
すべての mkting_campaigns を返し、mkting_campaigns に上記のステータス条件を満たすキャンペーンと ivrnumbers を入力します。ただし、上記の条件を満たす mkting_campaigns のみが必要です (すべての mkting_campaigns ではありません)。
ここには2つの解決策があります
- 代わりに結合を使用できます。しかし、それは良い習慣ですか?
- 結果にロジックを実装して不要なものをフィルタリングする必要
mkting_Campaigns
がありますが、クエリを変更して目的の結果のみを取得するより良い方法はありませんか?
助けてください
ありがとう