Laravel关系没有任何回报

时间:2019-11-15 10:08:23

标签: php laravel eloquent

我在laravel雄辩的关系中有问题。 我的应用程序中有2个模型:文章和类别。

文章模型:

public function category()
{
    return $this->belongsToMany('App\Category');
}

类别模型:

public function article()
{
    return $this->hasMany('App\Article');
}

这两个丝束之间的关系为hasMany (Category -> article)belongsToMany (Article -> category)

类别将使用categoryController上的此方法按请求的段获取:

$category = Category::where('slug', '=', $slug)->get();

当我想从类别中获取文章时,问题会显示在视图中,什么也不会返回:

@foreach ($category->article->all() as $article)
    {{ $article->name }}
@endforeach

@dd($category->article)中我们将得到空集合:

Collection {#323 ▼
  #items: []
}

3 个答案:

答案 0 :(得分:1)

由于@lagbox试图在注释中突出显示,对于数据透视表,两个关系都应为belongsToManyhasMany的倒数是belongsTo

如果一篇文章属于许多类别,而一个类别可以有很多文章,那么理想情况下,应该存在many-to-many关系。类别模型应与Article模型具有belongsToMany关系,反之亦然。此外,应该有一个数据透视表article_category。正如许多人所建议的那样,您可以使用@foreach($category->articles as $articles)

来获得属于该类别的文章。

您可以在这里阅读更多关于许多的信息: https://laravel.com/docs/5.8/eloquent-relationships#many-to-many

答案 1 :(得分:0)

您可以使用@forelse刀片指令,例如

    def yeartoday(self):
        return datetime.datetime.utcnow().strftime('%Y')

    def monthtoday(self):
        return datetime.datetime.utcnow().strftime('%m')


    def daytoday(self):
        return datetime.datetime.utcnow().strftime('%d')


    def informatdate1(self):
        return "%s-%s-%s" % (self.yeartoday(), self.monthtoday(), self.daytoday())


    def informatdate2(self):
        return "%s|%s|%s" % (self.yeartoday(), self.monthtoday(), self.daytoday())


您可以检查here

答案 2 :(得分:0)

您不需要写$category->article->all()$category->article本身将返回所有文章。 所以只需使用

@foreach ($category->article->all() as $article)
  {{ $article->name }}
@endforeach

对于渴望加载文章的人,可以使用   with 关键字

$category = Category::with('article')->where('slug', '=', $slug)->get();