CakePHP Пагинация с моделью, которая имеет модель HABTM

0

У меня 3 модели (художник, медиа-элемент, акцент)

Художник hasMany медиа-элементы, медиа-элементы hasAndBelongsToMany акценты,

Теперь у меня возникают проблемы с поиском с разбивкой по страницам, мне нужно получить страницы из 8 исполнителей и media_items, которые соответствуют введенному акценту. Надеюсь, это имеет смысл.

Это то, что у меня есть в настоящее время

$this->Paginator->settings = array(
    'limit' => 8,
    'fields' => array("Artist.first_name",
                        "Artist.last_name", "Artist.image",
                        "Artist.image", "Artist.slug"),
    'order' => "Artist.last_name",
    'url' => $this->passedArgs,
    'contain' => array(
                    'MediaItem'=> array(
                        "fields" => array("MediaItem.file",
                                            "MediaItem.title",
                                            "MediaItem.accent",)
                ),
    'joins' => array(
                    array(
                        'table' => 'media_items',
                        'type' => 'INNER',
                        'alias' => 'MediaItem',
                        'conditions' => array(
                                "AND" => array('Artist.id = MediaItem.artist_id')
                            )
                    ),
                    array(
                        'table' => 'media_accents_media_items',
                        'type' => 'RIGHT',
                        'alias' => 'MediaAccentsMediaItems',
                        'conditions' => array(
                                "AND" => array('MediaAccentsMediaItems.media_item_id = MediaItem.id')
                            )
                    ),
                    array(
                        'table' => 'media_accents',
                        'type' => 'RIGHT',
                        'alias' => 'MediaAccent',
                        'conditions' => array(
                                "AND" => array('MediaAccent.id = MediaAccentsMediaItems.media_accent_id'),
                                "OR" => array('MediaAccent.name LIKE' => "%".$searchFor ."%")
                            )
                    )
                ),
    'group' => 'Artist.id',
    'update' => '.results-container',
    'evalScripts' => true
);

он получает правильных художников, но возвращает все их следы, а не те, которые мне нужны. Есть ли лучший способ, а не перебирать результаты, обрезая их? Это мой текущий план резервного копирования.

Теги:
cakephp
pagination

1 ответ

1

Удалите соединения и просто используйте Containable Behavior, вот документы для более глубоких ассоциаций.

  • 0
    Получите что-то вроде работы, хотя не с тем, как должен работать пагинатор. По сути, Media Accent -> Media Item -> Artist, если я читаю документ, который вы указали справа. Просто нужно сделать так, чтобы художники разбили его на страницы.
  • 0
    В настоящее время я получаю 1 результат с акцентом на медиа с n медиаэлементами со связанным с ними aritst, что является своего рода противоположностью того, что я хочу, но все равно спасибо :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню