У меня есть следующие отношения:Кто-нибудь знает, как использовать «группу за» с полиморфными отношениями в Laravel?
return $this->morphedByMany('App\Models\Movie', 'listable', 'cnt_lists', 'list_id')->withPivot('id', 'order', 'updated_at')->where('movies.has_poster', true)->orderBy('order', 'desc')->withTimestamps();
Эти отношения производит этот запрос:
select `movies`.*, `cnt_lists`.`list_id` as `pivot_list_id`, `cnt_lists`.`listable_id` as `pivot_listable_id`, `cnt_lists`.`id` as `pivot_id`, `cnt_lists`.`order` as `pivot_order`, `cnt_lists`.`updated_at` as `pivot_updated_at`, `cnt_lists`.`created_at` as `pivot_created_at` from `movies` inner join `cnt_lists` on `movies`.`id` = `cnt_lists`.`listable_id` where `movies`.`has_poster` = '1' and `cnt_lists`.`list_id` in ('3176', '3283', '3285', '3287') and `cnt_lists`.`listable_type` = 'App\Models\Movie' order by `order` desc
Эта связь работает, но она захватывает много для каждого списка. Я пытаюсь ограничить только один список. Первоначально я изучал take()
, но это ограничивает весь набор результатов, а не лимит на список. Затем я подумал, что могу группировать cnt_lists.list_id
, который будет захватывать по одному в списке. Похоже, мне кажется, что я ищу. Ниже приведен запрос, который работает для меня, я просто пытаюсь понять, как использовать группу в отношениях, потому что это нарушает отношения, когда я добавляю его.
select `movies`.*, `cnt_lists`.`list_id` as `pivot_list_id`, `cnt_lists`.`listable_id` as `pivot_listable_id`, `cnt_lists`.`id` as `pivot_id`, `cnt_lists`.`order` as `pivot_order`, `cnt_lists`.`updated_at` as `pivot_updated_at`, `cnt_lists`.`created_at` as `pivot_created_at` from `movies` inner join `cnt_lists` on `movies`.`id` = `cnt_lists`.`listable_id` where `movies`.`has_poster` = '1' and `cnt_lists`.`list_id` in ('3176', '3283', '3285', '3287') and `cnt_lists`.`listable_type` = 'App\Models\Movie' group by `cnt_lists`.`list_id` order by `order` desc
Когда я добавляю groupBy
в отношениях:
return $this->morphedByMany('App\Models\Movie', 'listable', 'cnt_lists', 'list_id')->withPivot('id', 'order', 'updated_at')->where('movies.has_poster', true)->groupBy('cnt_lists.list_id')->orderBy('order', 'desc')->withTimestamps();
я получаю следующее сообщение об ошибке:
select `movies`.*, `cnt_lists`.`list_id` as `pivot_list_id`, `cnt_lists`.`listable_id` as `pivot_listable_id`, `cnt_lists`.`id` as `pivot_id`, `cnt_lists`.`order` as `pivot_order`, `cnt_lists`.`updated_at` as `pivot_updated_at`, `cnt_lists`.`created_at` as `pivot_created_at` from `movies` inner join `cnt_lists` on `movies`.`id` = `cnt_lists`.`listable_id` where `movies`.`has_poster` = 1 and `cnt_lists`.`list_id` in (3176, 3283, 3285, 3287) and `cnt_lists`.`listable_type` = App\Models\Movie group by `cnt_lists`.`list_id` order by `order` desc
По какой-то причине, модель App\Models\Movie
не в кавычках, так ломает весь запрос. Если я запускаю запрос вручную, он работает, мне просто нужно добавить кавычки к полиморфной модели. то есть "App\Models\Movie"
У вас есть morphMap настроить для этого? Это изменилось примерно в то же время, когда ваш запрос перестает работать? – mopo922
@ mopo922 Это новый запрос, поэтому он никогда не работал. У меня есть настройка morphMaps, но не для модели «App \ Models \ Movie». – ATLChris
@ATLChris не могли бы вы проверить, сохраняются ли в вашей базе данных * пространства имен * с помощью ** косой черты **? – atefth