Получите все связанные статьи из данной статьи, используя нетерпеливую загрузку


Я хочу получить все связанные статьи конкретной статьи на основе категории.

У меня есть связь между 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'));

}
Author: Jeune Guerrier, 2018-01-30

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();
 2
Author: Alexey Mezenin, 2018-01-30 09:57:41

Если вы хотите, чтобы модель категорий всегда стремилась загружать свои статьи из коробки, вы можете добавить

protected $with = ['articles'];

К Category.php файл.

С этим вы могли бы просто использовать $article->категория

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

protected $with = ['category'];

К сожалению, если вы хотите загрузить все с помощью

protected $with = ['category.articles'];

В этом случае вы получаете бесконечный цикл. Просто для получения информации о подобных случаях в будущем вы можете выполнить вложенную загрузку с помощью этого.

 1
Author: Inuyaki, 2018-01-30 10:49:28