Как использовать 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); чтобы получить данные.

Другие вопросы по тегам