Как использовать cakePHP, если ключом является $slug
У меня есть модель галереи, которая имеет много фотографий, и в моем представлении галереи я нахожу галерею по $ slug. Я показываю все фотографии, которые принадлежат конкретному gallery_id. Это работает, как ожидалось.
Однако я бы хотел добавить в запрос условие, которое возвращает фотографии, только если photo.active => 'yes'.
Я обнаружил, что поскольку представление галереи найдено с помощью $ slug, мои попытки отфильтровать фотографии не работают. В модели фотографий я сохраняю gallery_id, а не gallery.slug.
Я пытался использовать Содержимое в контроллере галереи, но я получаю следующие ошибки при использовании этого контроллера найти:
$galleryphotos = $this->Gallery->Photo->find('all', array(
'contain' => array('Photo'),
'conditions' => array(
'gallery.slug'=> $slug,
'photo.active'=>'yes')));
Ошибка, которую я получаю в представлении:
Warning (512): Model "Photo" is not associated with model "Photo"
Является ли добавление столбца gallery.slug к модели фотографий лучшим способом запроса фотографий с условиями?
Кроме того, почему я получаю сообщение об ошибке при использовании ableable в контроллере галереи?
Ура, Пол
1 ответ
Вы пытаетесь добавить модель Photo к запрашиваемой модели Photo, поэтому либо попробуйте:
$galleryphotos = $this->Gallery->find('first', array(
'contain' => array('Photo'),
'conditions' => array(
'Gallery.slug'=> $slug,
'Photo.active'=>'yes')));
Или же
$galleryphotos = $this->Gallery->Photo->find('all', array(
'contain' => array('Gallery'),
'conditions' => array(
'Gallery.slug'=> $slug,
'Photo.active'=>'yes')));
Предполагая, что связь Gallery hasMany Photo
,
И это должно быть внутри модели, а не контроллера, чтобы вы могли держать свой контроллер в скине и просто вызывать $this->Gallery->view($slug);
чтобы получить данные.