【问题标题】:Laravel polymorphic relationship scope by pivot fieldLaravel 多态关系范围按枢轴字段
【发布时间】:2019-06-30 14:25:52
【问题描述】:

我有如下多态关系:

// User.php
public function regions()
{
    return $this->morphedByMany('App\Region', 'relationship')->withPivot('relationship_level');
}

public function groups()
{
    return $this->morphedByMany('App\Group', 'relationship')->withPivot('relationship_level');
}

数据透视表如下:

id | user_id | relationship_id | relationship_type | relationship_level
 1 |      12 |               8 |        App\Region |             master
 2 |      18 |              12 |         App\Group |                fan

当该用户可以拥有多个relationship level 到多个relationship_type 时,有什么方法(最好是范围)可以让每个具有“master”级别的用户获得。

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    使用现有关系:

    User::whereHas('groups', function ($query) {
        $query->where('relationship_level', 'master');
    })->orWhereHas('regions', function ($query) {
        $query->where('relationship_level', 'master');
    })->get();
    

    使用枢轴模型和新关系(更快):

    class Relationship extends \Illuminate\Database\Eloquent\Relations\MorphPivot
    {
        //
    }
    
    class User extends Model
    {
        public function relationships()
        {
            return $this->hasMany(Relationship::class);
        }
    }
    
    User::whereHas('relationships', function ($query) {
        $query->where('relationship_level', 'master');
    })->get();
    

    【讨论】:

    • 第二种解决方案看起来很完美。这应该是extends MorphPivot 吗?如果是这样 - 这个类是从哪里来的?
    • 我添加了命名空间。不是必须的,它也可以扩展Model。 MorphPivot 仅需要与 using() 结合使用。
    猜你喜欢
    • 2021-08-12
    • 2020-07-15
    • 2019-08-20
    • 2019-07-05
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多