Laravel belongsToMany 排除数据透视表
Posted
技术标签:
【中文标题】Laravel belongsToMany 排除数据透视表【英文标题】:Laravel belongsToMany exclude pivot table 【发布时间】:2014-12-15 22:33:53 【问题描述】:我有两个模型,User
和 Badge
。一个用户可以有多个徽章,一个徽章可以属于多个用户。 (使用数据透视表)
目前我正在获取我需要的数据,但另外我正在获取pivot
表。如何排除这个?
这是User
模型:
class User extends Eloquent
public function badges()
return $this->belongsToMany('Badge', 'users_badges');
还有Badge
模型:
class Badge extends Eloquent
public function users()
return $this->belongsToMany('User', 'users_badges');
【问题讨论】:
【参考方案1】:将pivot
添加到模型中$hidden
属性的数组中。
class Badge extends Eloquent
protected $hidden = ['pivot'];
public function users()
return $this->belongsToMany('User', 'users_badges');
与您的User
模型相同
class User extends Eloquent
protected $hidden = ['pivot'];
public function badges()
return $this->belongsToMany('Badge', 'users_badges');
【讨论】:
@challet 是的,请查看the documentation here。向下滚动一点,您将找到一个如何动态隐藏属性的示例。【参考方案2】:或者您仍然可以通过这种方式按需隐藏支点...
$user = User::find(1);
$user->badges->makeHidden('pivot');
$badge = Badge::find(1);
$badge->users->makeHidden('pivot');
【讨论】:
makeHidden
和 makeVisible
也接受数组:makeHidden(['pivot', 'id', ...])
或 makeVisible(['pivot', 'id', ...])
【参考方案3】:
您可以通过使用 json 列来做到这一点。阅读此文档,希望对您有所帮助。 Avoid Pivot Table and Use Json Column in Laravel
【讨论】:
以上是关于Laravel belongsToMany 排除数据透视表的主要内容,如果未能解决你的问题,请参考以下文章
检查 belongsToMany 关系是不是存在 - Laravel
Laravel 关系:hasManyThrough、belongsTo、belongsToMany
Laravel:如何编写关于 belongsToMany 关系的连接计数查询?
Laravel:保存/附加/同步自定义枢轴模型(belongsToMany)