2017-01-27 2 views
0

Я пытаюсь получить последние 5 строк для каждого внешнего ключа в таблице, поэтому представьте следующую структуру базы данных:Laravel QueryBuilder - Выбор N строк для каждого внешнего ключа

CATEGORY (id, name) 
ARTICLE (id, category_id, title) 

Я хочу сделать что-то вроде это:

Article::where("category_id", 1) 
     -> latest() 
     -> limit(5) 
     -> get(); 

Article::where("category_id", 2) 
     -> latest() 
     -> limit(5) 
     -> get(); 

И так далее. Как я могу сделать это как единственный запрос для всех внешних ключей?

Спасибо!

ответ

0

Вы можете сделать это:

Category::with(['article' => function($q){ 
     $q->orderBy('id', 'desc'); 
     $q->limit(5); 
    })->get(); 

Конечно, вы должны создать внешние ключевые отношения в вашей модели для того, чтобы использовать эту функциональность.

Вот документация, как создать отношения: https://laravel.com/docs/5.4/eloquent-relationships#one-to-many

+0

Не работает нормально. Я добавил это в модель моей категории: Публичные статьи функций() {return $ this -> hasMany (Article :: class); } , но я получаю только записи для 4-го внешнего ключа? – John1984

+0

Вы должны получить все категории с свойством 'article()', где будут статьи – Buglinjo

+0

Извините, у меня все еще есть проблемы. Каким должен быть метод отношений с моей моделью? – John1984

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