Cakephp—尝试模拟一个简单的sql查询,该查询涉及3个表和2个where条件的联接
我有三种型号Cakephp—尝试模拟一个简单的sql查询,该查询涉及3个表和2个where条件的联接,cakephp,Cakephp,我有三种型号 MktingCampaign 活动 IvrNumber MktingCampaignhasManyCampaign和CampaignhasOneIvrNumber 我正在尝试模拟这个查询- select * from mkting_campaign join campaign on mkting_campaign.id = campaign.mkting_campaign_id join ivr_numbers on campaign.id = ivr_numbers.camp
MktingCampaign
活动
IvrNumber
MktingCampaign
hasManyCampaign
和Campaign
hasOneIvrNumber
我正在尝试模拟这个查询-
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;
它所做的是获取其活动.status=1和ivr\u number.status=0的营销活动
我写了这个
$this->MktingCampaign->find('all',array(
'contain' => array(
'Campaign' => array(
'conditions' => array('Campaign.status' => 1),
'IvrNumber' => array(
'conditions' => array(
'IvrNumber.status' => 0
)
)
)
)
));
它将返回所有营销活动,并使用满足上述状态条件的营销活动和IVR编号填充营销活动。但我只想要满足上述条件的mkting_活动(不是所有mkting_活动)
我这里有两个解决方案
我可以用连接代替。但这是一种好的做法吗
我必须在结果上实现一些逻辑来过滤不需要的mkting_活动
,但是没有更好的方法来修改查询以只获得所需的结果吗
请帮忙
谢谢首先,可包含的
没有加入有很多
。对于条件,您可以将hasMany
绑定为hasOne
,并为数据保留containable
在查询之前
$this->bindModel(数组('hasOne'=>array(..)
添加到您的查询:
'contain' => array(
'HasOneAliasFromAbove',
... other contains ....
),
'conditions' => array(
'HasOneAliasFromAbove.field' => 'value'
)
您还可以直接在关系中添加条件,这将为您提供类似的联接
LEFT JOIN foo as Foo ON (... your conditions ...)
或者您可以将其设置为一个右连接
,它将只获取包含相关数据的行。这是一个好的做法吗?即使我在模型中指定了关联,我是否需要在每次我想加入时都绑定模型?绑定模型是一种动态创建关联的方法。本质上是一样的。您也可以在模型的$hasOne属性中执行此操作,尽管这是毫无意义的,因为您通常需要一些fk来加入,即使一个模型“有许多”另一个模型,仅出于查询目的,我是否需要将其设置为“hasOne”?下面是关于正在进行的操作的更多详细信息,谢谢!问题解决了,但看起来有点古怪和迂回的解决方案。我仍然没有明白这一点——为什么我要给虚假的关系来完成我的事情!