Cakephp 1.3深度HABTM找到条件

时间:2012-10-08 18:25:45

标签: cakephp-1.3

我有以下型号:
CarrierStoreClassification
情况如下:
Carrier HABTM StoreStore HABTM Carrier
Carrier hasMany Classification
在过去的8个小时左右的时间里,我一直在努力让所有Carriers获得Store.id = 152
我遇到问题的地方是,我希望生成的数组包含来自Classification的{​​{1}}。我也希望按Carriers排序。
我尝试了很多东西。我的所有答案都得到了Classifications没有包含carriers或得到所有 classifications并包含carriers的答案。 我试过可以容纳它似乎没有限制结果,它似乎抓住了所有的运营商,如果他们不是正确的商店,就把商店留空。
我试过加入但是我也无法成功地完成这项任务。
我可能做错了什么,但我不能为我的生活搞清楚。
代码

classifications

1 个答案:

答案 0 :(得分:0)

我发现的一个解决方案在于创建habtm模型并使用contains和manual join子句为此创建条件。

型号代码如下:

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中应用条件并获得Store和Carrier模型的棘手语法是:

$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')
        )

    )
));

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