文章模型:
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: []
}
答案 0 :(得分:1)
由于@lagbox试图在注释中突出显示,对于数据透视表,两个关系都应为belongsToMany
。 hasMany
的倒数是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();