Получите все связанные статьи из данной статьи, используя нетерпеливую загрузку
Я хочу получить все связанные статьи конкретной статьи на основе категории.
У меня есть связь между Article
и Category
Article.php
public function category(){
return $this->belongsTo(ArticleCategory::class,'category_id','id');
}
ArticleCategory.php
public function articles(){
return $this->hasMany(Article::class,'category_id','id');
}
ArticleController.php
public function singleArticle(Article $article){
//I want to convert this statement to eager loading statement
$relatedArticles = $article->category->articles;
return view('pages/article',compact('article','relatedArticles'));
}
2 answers
Вы также можете использовать whereHas()
, если хотите просто получить статьи по теме:
$relatedArticles = Article::whereHas('category', function($q) use($article) {
$q->where('id', $article->category_id);
})
->get();
Если вы хотите загрузить все в одну коллекцию:
$relatedArticles = Article::with(['category.articles' => function($q) use($article) {
$q->where('id', $article->category_id);
}])
->get();
Если вы хотите, чтобы модель категорий всегда стремилась загружать свои статьи из коробки, вы можете добавить
protected $with = ['articles'];
К Category.php файл.
С этим вы могли бы просто использовать $article->категория
Это также работает для неявных привязок в вызове функции, поэтому вы можете быстро загружать категорию для каждой статьи, когда пишете в Article.php
protected $with = ['category'];
К сожалению, если вы хотите загрузить все с помощью
protected $with = ['category.articles'];
В этом случае вы получаете бесконечный цикл. Просто для получения информации о подобных случаях в будущем вы можете выполнить вложенную загрузку с помощью этого.