我正在使用laravel 5.3并需要一些Eloquent模型查询的帮助 . 我有三个模型(UserDetails,Categories,Articles) . 我在UserDetails-> Categories(belongsstoMany)和Categories-> Articles(belongsstoMany)之间的关系很有效 . 但是,我将如何获取Userdetails-> Categories-> Articles之间的关系数据 .
每个单独的关系都正常工作,即Userdetails :: find(1) - > categories and Categories :: find(1) - > Articles .
我觉得范围可能是答案,但是当我尝试它时它们似乎不起作用 .
Relationships in models
UserDetails.php
public function Categories(){
return $this->belongstoMany('App\Categories', 'users_cats', 'user_id','cat_id');
}
Categories.php
public function articles(){
return $this->belongsToMany('App\Article', 'article_categories', 'categoryID', 'articleID');
}
我已经调查了HasManyThrough函数,但是我再次遇到问题,据我所知它应该是
return $this->hasManyThrough('App\Article', 'App\Categories', TertiaryForeignKey, FinalForeignKey, LocalForeignKey);
我的表格设置为
articles_categories pivot table
articleID - 文章的主键
categoryID - 类别的主键
users_cats pivot table
user_id - userdetails的主键
cat_id - 类别的主键
基于此,hasManyThrough应该如下所示?
public function articles(){
return $this->hasManyThrough('App\Article', 'App\Categories', 'user_id', 'articleID', 'id');
}
但是这会返回错误列未找到:1054未知列'categories.user_id'在'字段列表'中
2 回答
更新
所以,如果你想拥有这种关系
userdetails->分类 - >文章
然后你需要这样做:
Userdetail模型:
分类型号:
文章模型:
然后你可以直接调用
UserDetails::find(1)->articles->get();
您只需要在UserDetails.php模型中声明这样的关系:
在Categories.php模型中:
然后,您可以检索控制器中的类别集合:
将$ categories变量传递给View并使用foreach循环显示每条记录(文章是模型中的函数)
使用第二个foreach,您将访问属于该用户的类别的文章 .