торт содержит - PullRequest
       68

торт содержит

0 голосов
/ 05 апреля 2011

У меня проблема с содержанием :(, позвольте мне объяснить:

Отношения моделей:

Клиент -> hasMany -> Карта -> hasAndBelongsToMany -> Партнер -> hasMany -> Контакт

Мне нужно получить всех партнеров и контакты Клиента с codigo = 24150 и Контактов с координатами = 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"

Я был бы признателен за помощь.

Заранее спасибо.

Руи

Ответы [ 3 ]

2 голосов
/ 05 апреля 2011

Вы также можете оставить оба своих массива $conditions и $contain разделенными ..

и измените последнюю строку на:

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

обратите внимание на функцию array_merge ..
это должно решить вашу проблему без необходимости использовать только один массив для них обоих

1 голос
/ 05 апреля 2011

Наконец-то исправил, 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);
1 голос
/ 05 апреля 2011

Вы должны получить сообщение о том, что Клиент не связан с Партнером. Попробуйте следующее

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