0

我有以下型号:
Carrier, Store, Classification.
情况如下:
Carrier HABTM StoreStore HABTM Carrier
Carrier也有很多 Classification
在过去的 8 个小时左右,我一直在努力寻找所有的Carriers地方Store.id = 152
我遇到麻烦的地方是,我希望生成的数组包含Classification来自Carriers. 我也想排序Classifications
我已经尝试了很多东西。我所有的答案要么在carriersclassifications包含的情况下得到了正确的答案,要么在包含在内的情况下得到了所有的答案。 carriersclassifications
我已经尝试过可包含的,它似乎并没有限制结果,它似乎抓住了所有的运营商,如果他们不是正确的商店,他们就会把商店留空。
我试过加入,但我也无法成功地让它工作。
我可能做错了什么,但我一生都无法弄清楚。
带代码

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';
}
4

1 回答 1

0

我发现的一种解决方案是创建 habtm 模型并通过使用 contains 和手动连接子句在其上设置条件。

型号代码如下:

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

    )
));

我希望这有帮助。这个问题困扰了我很长时间,直到最近我才发现了这个解决方法。

于 2013-04-16T21:42:43.837 回答