0

contain :( に問題があります。説明させてください。

モデル関係:

クライアント -> hasMany -> カード -> hasAndBelongsToMany -> パートナー -> hasMany -> 連絡先

私が必要とするのは、クライアントのすべてのパートナーと連絡先を codigo = 24150 で取得し、連絡先を coords_lat = 38.71093 で取得することです。

コード:

$conditions = array('conditions' => 
   array('codigo' => '24150')
);

$contain = array(
   'contain'=> array(
    'Partner' => array(
       'Contact' => array('conditions' => array('coords_lat' => '38.71093')) 
    )
   )
);

$parceiros = $this->Client->find('all', array($conditions, $contain));

私は追加しました

var $actsAs = array('Containable'); 

app_model.php へ

正直に言うと、ここで何が起こっているのかよくわかりません... 真実は、mysql が巨大なクエリを実行し、膨大な時間がかかるということですが、「codigo = 24150」で選択することはありません。

助けていただければ幸いです。

前もって感謝します。

ルイ

4

3 に答える 3

2

$conditions両方の配列と分離したままにすることもできます$contain..

最後の行を次のように変更します。

$parceiros = $this->Client->find('all', array_merge($conditions, $contain));

array_merge 関数に注意してください。
これにより、両方に1つの配列のみを使用する必要なく、問題が解決するはずです

于 2011-04-05T18:40:52.580 に答える
1

最後にそれを修正しました。cakephp は、条件を持ち、異なる配列に含めるのが好きではありませんでした。これに対する解決策は次のとおりです。

$conditions = array(
    'conditions' => array('codigo' => '24150'),
    'contain' => array(
        'Card'=>array(
            'Partner' => array (
                'Contact' => array(
                    'conditions' => array('Contact.coords_lat' => '38.710930')
                 )
             )
         )
     )
 );

 $parceiros = $this->Client->find('all', $conditions);
于 2011-04-05T16:32:31.590 に答える
1

クライアントがパートナーに関連していないことを示すエラーが表示されるはずです。以下を試してください

$this->Client->contain(
    'Card'=>array('Partner' => array(
       'Contact' => array('conditions' => array('coords_lat' => '38.71093')) 
    )
   )
)
);

$parceiros = $this->Client->find('all', array('conditions' => 
                                            array('Client.codigo' => '24150')
                                            )
                                  )
于 2011-04-05T12:08:05.930 に答える