#php #mysql #laravel #eloquent
#php #mysql #laravel #красноречивый
Вопрос:
У меня есть таблица Laravel posts
с несколькими categories
. Как я могу получить все posts
сгруппированные по categories
? Я делал что-то вроде Post::where('userID', 1)->groupBy('categoryID')
. Но это вернуло только плоский массив именованных массивов, подобных этому:
[1 => ['title'=>'title 1'], 2 => ['title'=>'title3']]
Как я могу вернуть массив массивов, подобных этому:
[1 => [['title'=>'title 1'], ['title' => 'title 2], 2 => [['title'=>'title 3']]]
Обновить:
В настоящее время я выполняю объединение, а затем использую коллекцию Laravel для ее сортировки в php:
Post::join('categories', ....).where('userID', 1)->get()->groupBy('categoryID');
Я могу получить то, что хочу, но интересно, есть ли лучший способ?
Ответ №1:
Возможно, вам понадобится это:
$catsWithPosts = Category::with(array('posts' => function($query){
$query->select('title')->where('userID', 1);
}))->get();
Предполагается, что вы объявили правильную взаимосвязь между Post
и Category
моделью.
Комментарии:
1. Спасибо, но
userID
он включенposts
. Похоже, это не работает.2. Какая таблица содержит category_id ?
3. Кажется, это работает. Но, глядя на документацию, мне интересно, выполняю ли я n запросов в зависимости от количества моих категорий? laravel.com/docs/eloquent
4. Нет, это не
n
запросы, потому что он использует метод быстрой загрузки.