从链接的雄辩模型中检索集合laravel



我使用的是laravel 5.3,需要一些关于Eloquent模型查询的帮助。我有三个模型(UserDetails,Categories,Articles)。我在UserDetails->Categories(belongstoMany)之间有一种关系,在Categories->Articles(belongstoMany)间有一种很好的关系。但是,我该如何获取Userdetails->Categories->Articles之间的关系数据呢。

每个单独的关系都运行良好,即Userdetails::find(1)->categories和categories::find(1)->Articles。

我有一种感觉,示波器可能是答案,但当我尝试时,它们似乎不起作用。

模型中的关系

UserDetails.php

public function Categories(){
return $this->belongstoMany('AppCategories', 'users_cats',  'user_id','cat_id');
}

Categories.php

public function articles(){
return $this->belongsToMany('AppArticle', 'article_categories', 'categoryID', 'articleID');
}

我已经研究过HasManyThrough函数,但再一次,我在实现它时遇到了问题,据我所见,它应该是

return $this->hasManyThrough('AppArticle', 'AppCategories', TertiaryForeignKey, FinalForeignKey, LocalForeignKey);

我的桌子被设置为

articles_categories数据透视表

articleID–文章的主键

categoryID–类别的主键

users_cats数据透视表

user_id–userdetails 的主键

cat_id–类别的主键

基于此,hasManyThrough应该是这样的吗?

public function articles(){
return $this->hasManyThrough('AppArticle', 'AppCategories', 'user_id', 'articleID', 'id');
}

但是,这会返回错误未找到列:1054"字段列表"中的未知列"categories.user_id">

更新

所以如果你想有这种关系

用户详细信息->类别->文章

那么你需要做这个:

用户详细型号:

public function categories()
{
return $this->hasMany(Category::class);
}
public function articles()
{
return $this->hasManyThrough(Article::class, Categories::class);
}

类别型号:

public function userdetails()
{
return $this->belongsTo(Userdetails::class);
}
public function categories()
{
return $this->hasMany(Category::class);
}

文章型号:

public function categories()
{
return $this->belongsToMany(Category::class);
}

然后您可以直接调用UserDetails::find(1)->articles->get();

您只需要在UserDetails.php型号:

public function categories()
{
return $this->hasMany(Categories::class);
}

在Categories.php模型中:

public function articles()
{
return $this->hasMany(Articles::class);
}

然后,您可以在控制器中检索类别集合:

$userdetails = UserDetails::get();

将$categories变量传递到View中,并使用foreach循环显示每条记录(其中文章是模型中的函数)

@foreach($userdetails->categories as $usercategories )
<div> {{$usercategories->name}} </div>
@foreach($usercategories->articles as $categoryarticles )
<div> {{$categoryarticles->name}} </div>
@endforeach
@endforeach

使用第二个foreach,您将访问属于用户的类别的文章。

最新更新