Laravel belongsToMany 排除数据透视表

Posted

技术标签:

【中文标题】Laravel belongsToMany 排除数据透视表【英文标题】:Laravel belongsToMany exclude pivot table 【发布时间】:2014-12-15 22:33:53 【问题描述】:

我有两个模型,UserBadge。一个用户可以有多个徽章,一个徽章可以属于多个用户。 (使用数据透视表)

目前我正在获取我需要的数据,但另外我正在获取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');

【讨论】:

makeHiddenmakeVisible 也接受数组: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)

Laravel - Eager Loading BelongsToMany 关系

Laravel 递归 whereHas on BelongsToMany 关系