cakephp 3.4 - Разбивка на страницы ассоциаций ownToMany

У меня есть 3 модели.

Меню -> BelongsToMany -> Теги -> BelongsToMany -> Сообщения.

Я получаю menu_slug в качестве входных данных, и мне нужно разбить на страницы посты, которые приходят.

Запрос, который я написал, работает, как и ожидалось, но я не могу разбить его на страницы в соответствии с сообщениями.

Мой запрос:

$posts=$this->Menus->findByMenuSlug($slug)->contain(['Tags'=>function($query){
            return $query->contain(['Posts'=>function($qry){
                return $qry->select(['id','title','slug','short_description','created'])->where(['status'=>1,'is_deleted'=>2,'is_approved'=>1])->orderDesc('Posts.created');
            }]);
       }])->first();`

У меня нет идеи, как реализовать это с помощью Paginator. Пожалуйста помоги.


person Sainesh Mamgain    schedule 09.07.2017    source источник


Ответы (1)


Привет, после долгих поисков я нашел решение. Я не знаю точно, лучший ли это способ сделать это, но пока он работает. Если у кого-то есть лучшее решение, пожалуйста, предоставьте его.

Решение, которое сработало для меня:

    $this->loadComponent('Paginator');

    $this->Paginator->setConfig([
        'limit'=>20
    ]);

    $menu=$this->Menus->find()->where(['menu_slug'=>$slug])->contain(['Tags'])->first();
    $tagIds=[];
    if (!empty($menu->tags)){
        foreach ($menu->tags as $tag) {
            $tagIds[]=$tag->id;
        }
    }

    $posts=[];

    if (!empty($tagIds)){
        $posts=$this->Posts->find()->contain(['Tags'=>function(Query $query)use($tagIds){
            return $query->where(['Tags.id IN'=>$tagIds]);
        }])->orderDesc('created');
        $posts=$this->paginate($posts);
    }

    $this->set(compact('menu','posts'));`
person Sainesh Mamgain    schedule 10.07.2017