cakephp съдържа

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

Връзки на моделите:

Клиент -> 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"

Ще се радвам на помощ.

Благодаря предварително.

Руи


person Rui    schedule 05.04.2011    source източник
comment
Какъв е резултатът, който получавате в момента? Какво е съдържанието на $parceiros?   -  person vindia    schedule 05.04.2011
comment
Мисля, че трябва да проверите отговора на @Leo. Вероятно тук грешите. Вашият синтаксис изглежда добре.   -  person vindia    schedule 05.04.2011
comment
Няма резултат... тъй като cakephp генерира луди заявки, моля, проверете тук: pastebin.me/24d7e33ce334e56087dcb657080325ce Съжалявам за име на таблиците, те са на португалски Cliente = Cliente, CgdCartoesCliente = Card, cgd_cartoes_clientes = HATBM таблица за свързване   -  person Rui    schedule 05.04.2011


Отговори (3)


Можете също така да запазите двата си масива $conditions и $contain разделени..

и променете последния ред да бъде:

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

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

person Mouad Debbar    schedule 05.04.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);
person Rui    schedule 05.04.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')
                                            )
                                  )
person Leo    schedule 05.04.2011
comment
Няма късмет... все още генерира дълги заявки и изчакване на mysql :( също така не виждам да избира от codigo 24150. Моля, проверете заявките тук: pastebin.me/24d7e33ce334e56087dcb657080325ce - person Rui; 05.04.2011
comment
OK Rui нека опитаме малък процес на елиминиране. Коментирайте реда $this-›Client-›contain. След това pr() съдържанието на $parceiros, какво получавате? - person Leo; 05.04.2011
comment
Нещо е странно, очевидно $conditions се игнорира при намирането :( Добавих рекурсивно = -1 и генерираната заявка е select * from clientes WHERE 1 = 1 ? :( - person Rui; 05.04.2011
comment
И така, върна ли всички клиенти? изпълнете само последния ред отново (промених го, за да включва името на модела) - person Leo; 05.04.2011
comment
Сега се подобрява... Върнах Клиента и Картите... но не върнах Партньори и Контакти. (Разкоментирах съдържащия ред) - person Rui; 05.04.2011
comment
Точно сега се въртим в кръг. Изпълнявайки САМО последния ред, получавате ли клиента(ите) върнат с 'codigo' от 24150 - person Leo; 05.04.2011
comment
Лео, да....и с карти също. Връща Клиента с кодиго 24150 и неговите карти (които са ID 14,23,29)... - person Rui; 05.04.2011
comment
Добре, ако не получавате нищо с некоментираното съдържание, вие.може да имате проблем.с вашите взаимоотношения. Задайте рекурсивно на 2 и какво получавате? - person Leo; 05.04.2011
comment
Опитах се да задам рекурсивно на 5... и получавам всички релации добре... когато добавя съдържане, спира да работи... също 'conditions' =› array('coords_lat' =› '38.71093') изглежда е игнориран. - person Rui; 05.04.2011
comment
се опита да опрости съдържа до: $this-›Client-›contain = array( 'Card'=›array('Partner')); но също не работи :( - person Rui; 05.04.2011
comment
Без притеснения, глупаво присвоявах масив на $this-›client-›contain, което очевидно е метод. Редактирах кода си - person Leo; 06.04.2011