0

次のモデルがあります:
CarrierStoreClassification
状況は次のとおり です。
Carrier HABTM StoreおよびStore HABTM Carrier
Carrierある Classification
私は過去 8 時間ほど、すべてのCarriers場所を取得しようとしてきましたStore.id = 152
私が問題を抱えているのは、結果の配列に からのものを含めたいということClassificationですCarriers。私も並び替えたいですClassifications
私は多くのことを試しました。carriers私の回答はすべて、含まれていない状態で正しいか、classifications含まれているすべてのもの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

私が見つけた解決策の 1 つは、habtm モデルを作成し、contain 句と手動結合句を使用して条件を作成することです。

モデルコードは次のようになります。

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 に答える