我有许多关系的模型。我想通过数据透视表分类新闻来关联州和类别。
类别模型
class Category extends Model
{
public function news() {
return $this->belongsToMany('App\News');
}
}
新闻模式
class News extends Model
{
public function categories()
{
return $this->belongsToMany('App\Category');
}
public function state()
{
return $this->belongsTo('App\State');
}
}
和州模式
class State extends Model
{
public function news() {
return $this->hasMany('App\News');
}
}
我想选择与cat_type = 2的状态相关的新闻(来自类别表) 我试过了
$slide_news = State::whereHas('news.categories',function($query){ $query->where('categories.cat_type',2);})
->with(array('news'=>function($query){
$query->orderBy('created_at', 'desc');}
))->where('id',$id)->first();
但是cat_type过滤器无效。我也尝试过hasManyThrough,但我不知道如何使用Pivot Table实现它 请帮忙
答案 0 :(得分:1)
看看here。
目前Laravel 5.3并不支持使用数据透视表的hasToManyThrogh。只需使用其他方法。
作为替代方式:
只要考虑这些模型及其关系:
A <=> B with pivot table A_B
B <=> C with pivot table B_C
现在您可以创建 pivot VIEW 调用A_C:
SELECT A_id, C_id FROM A_B
INNER JOIN B_C on A_B.B_id = B_C.B_id
GROUP BY A_id, C_id
我想你可以猜到我的伎俩。
是的,忘了hasManyThough。
现在您可以使用A.belongsToMany(C)。
只是不要忘记标记为已接受的答案:))
答案 1 :(得分:0)
有一个Laravel 5.5 Composer软件包,可以执行多级关系(深层)
包装: https://pastebin.com/AHJ5UpEu
示例:
User
→属于许多→Role
→属于许多→Permission
class User extends Model
{
use \Staudenmeir\EloquentHasManyDeep\HasRelationships;
public function permissions()
{
return $this->hasManyDeep(
'App\Permission',
['role_user', 'App\Role', 'permission_role'], // Pivot tables/models starting from the Parent, which is the User
);
}
}
例如需要定义外键的示例:
https://github.com/staudenmeir/eloquent-has-many-deep
致主持人: 不要删除我的答案
我花了两天的时间才解决了这个问题,我感到非常高兴,发现了我想让全世界知道的解决方案
请注意,我的答案已被批准,但您已将其删除。
问题的标题是关于:Laravel的hasManyThrough数据透视表,而我的回答恰恰是,一种在数据透视表上执行hasManyThrough等效的解决方案
这个问题已有3年历史了,让我们承认没有人想要针对这个问题的解决方案,因为我们都有自己的解决方案。 如果我是你,我希望有一个通用的答案。