2015-06-16 4 views
0

У меня есть две таблицы - Categories и Posts. Отношения между ними - один-ко-многим. i.e - В категории есть много сообщений.Как получить последнее n число связанных записей модели в laravel

Я пытаюсь получить список всех Categories с их последние 3 сообщений

Я попытался это: -

$with = array('posts' => function($query) { 
    $query->take(3); 
    $query->orderBy('created_at', 'desc'); 
    $query->addSelect(array('name', 'excerpt','category_id')); 
}); 

$categories = Category::with($with)->get(); 

Но это, кажется, работает только для первой категории, последующие категории пусты.

+0

попробуйте использовать 'toSql()' вместо 'получить()', чтобы сбросить запрос – Luceos

+0

@Luceos тот странно - запрос просто показывает, как 'select * from categories'. – ghosh

+0

Что происходит, когда вы делаете '$ with = array ('posts' => function ($ query) { $ query-> addSelect (array ('name', 'excerpt', 'category_id')) -> take (3) -> orderBy ('created_at', 'desc'); }); ' – Luceos

ответ

1

Вы можете попробовать что-то вроде этого:

$categories = Category::all()->each(function($category) { 
    $category->posts = $category->posts() 
           ->addSelect(['name', 'excerpt', 'category_id']) 
           ->latest()->take(3)->get(); 
}); 
+0

Спасибо, что работает. Есть ли у них какой-либо способ получить эту нагрузку? Хотя я получаю результаты, как я и хотел, делая n + 1 запросов. – ghosh

+0

Я думаю, что это не может быть сделано с 1 запросом. –

Смежные вопросы