Cakephp сложный hasMany запрос отношения - PullRequest
0 голосов
/ 14 марта 2012

Я очень новичок в CakePHP.Я хочу сделать запрос в моей базе данных, например:

SELECT m.id, l.*, lp.picture_path 
FROM member m INNER JOIN listing l ON m.member_id = l.member_id
INNER JOIN listingPicture lp ON l.listing_id = lp.listing_id
WHERE lp.picture_default='1'

У меня есть 3 модели в моей CakePHP: Member, Listing и ListingPicture, каждая со следующими отношениями

  • Пользователь hasManyЛистинг
  • Листинг hasMany ListingPicture
  • Листинг относится к члену
  • Листинг принадлежит к списку

Из моего контроллера Member, как выполнить вышеуказанный запрос?

Я пробовал

$this->Member->Listing->find("all")

..., который хорошо работает, но когда я добавил условия, подобные этому:

$this->Member->Listing->find('all', array(
    'conditions' => array('ListingPicture.picture_default'=>'1')));

... Я получаю ошибку.

Поскольку я новичок в CakePHP, я не знаю, как увидеть ошибку.

Может кто-нибудь посоветовать мне, как я могу выполнить этот запрос?

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Убедитесь, что для вашей модели задано следующее:

public $actsAs = array('Containable');

Затем используйте встраиваемое поведение CakePHP, чтобы включить в него только нужные вам связанные данные с указанными полями и условиями.Следуя концепции MVC, предлагается сохранить ваши находки в модели, а не в контроллере.Это не обязательно, но - это делает намного проще точно знать, где находятся все находки, и соответствует мантре «Толстая модель / Тощий контроллер».В этом случае это будет что-то вроде:

//in the Member Controller
$listings = $this->Member->Listing->getListings();

//in the Listing Model
function getListings() {
    $listings = $this->find('all', ...
    return $listings;
}
0 голосов
/ 14 марта 2012

Вы должны указать условие во время привязки ListPicture к листингу.

$this->Member->Listing->bindModel(array(
  'ListPicture'=>array(
    'condtions'=>array('ListingPicture.picture_default'=>'1')
  ))
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...