CakePHP的1.3深HABTM与条件

问题描述:

我有以下型号找到。
这里的情况是:
CarrierHABTMStoreStoreHABTMCarrier
CarrierhasManyClassification
我一直在尝试过去8小时左右,以获得所有的Carriers其中Store.id = 152
我遇到麻烦的是,我想要得到的数组包括从Carriers。我也想按Classifications排序。
我尝试了很多东西。我所有的答案都没有得到正确的carriers没有包括classifications或得到全部carriersclassifications包括在内。
我尝试了可容纳的,它似乎并没有限制结果,它似乎抓住所有的承运人,并留下商店空白,如果他们不是正确的商店。
我试过连接,但是我无法成功获得该工作。
我可能做错了什么,但我不能为我的生活弄清楚。
与代码
CakePHP的1.3深HABTM与条件

class Carrier extends AppModel 
{ 
    var $name = 'Carrier'; 
    var $actsAs = array('Containable'); 
    var $hasAndBelongsToMany = array('Rect','Store'); 
    var $belongsTo = array('Classification','Category'); 
} 

class Store extends AppModel 
{ 
    var $name = 'Store'; 
    var $hasAndBelongsToMany = array('Carrier'); 
    var $belongsTo = array('SparkPlug.User'); 
    var $actsAs = array('Containable'); 
} 

class Classification extends AppModel 
{ 
    var $name = 'Classification'; 
    var $actsAs = array('Containable'); 
    var $hasMany = 'Carrier'; 
} 
+0

您可以在代码大括号中粘贴模型吗?如果可以,我很乐意提供帮助。 –

+0

添加代码。谢谢你提供的所有帮助! – Johnston

的一个解决方案,我发现包括在创建的habtm模型,并通过使用包含使对条件和手动加入子句。

模型代码是这样的:

store.php

<? 
class Store extends AppModel { 

    var $actsAs = array('Containable'); 
    var $hasMany = array('CarriersStore'); 
} 
?> 

carrier.php

<? 
class Carrier extends AppModel { 

    var $actsAs = array('Containable'); 
    var $hasMany = array('CarriersStore'); 
} 
?> 

carriers_store.php

<? 
class CarriersStore extends AppModel { 

    var $belongsTo = array('Store', 'Carrier'); 
    var $actsAs = array('Containable'); 

} 
?> 

然后,在carriers_controller.php棘手的语法应用条件,并获得两个商店和运营商模式是:

$carriers = $this->Carrier->find('all', array(
    'conditions' => array('CarrierStore.store_id' => 1), 
    'contain' => array('CarriersStore' => array('Store')), 
    'joins' => array(
     array(
      'table' => 'carriers_stores', 
      'alias' => 'CarrierStore', 
      'type' => 'INNER', 
      'conditions' => array('CarrierStore.carrier_id = Carrier.id') 
     ) 

    ) 
)); 

我希望这有助于。这个问题困扰了我很多时间,直到最近才找到解决方法。