【发布时间】:2020-06-19 13:43:43
【问题描述】:
在我的应用程序中,我有一个用户 (duh)
class User {
public function teams()
{
return $this->belongsToMany(Team::class, 'team_user', 'user_id')->wherePivot('confirmed', '!=', null);
}
}
我正在尝试制作一个扩展User 的模型,就像这样
class Teamleader extends User
{
protected $table = 'users';
public static function boot()
{
parent::boot();
static::addGlobalScope(new TeamleaderScope);
}
}
这个想法是,团队负责人是在team_user 数据透视表中将isLeader 布尔值设置为true 的用户。在我的TeamleaderScope 我已经
尝试过类似
class TeamleaderScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
$model->teams()->wherePivot('isLeader', true);
}
}
但这似乎是错误的,因为Teamleader::all() 只是返回所有用户。我从来没有尝试过扩展这样的模型,但它应该是可能的,对吧?任何人都可以帮助我朝着正确的方向前进吗?
【问题讨论】:
-
Ramin 在下面提供了符合 OOP 优先组合优于继承原则的指导,这是一个好主意。我已经使用继承和特征走上了这条路,只是想提供一个意见,它经常比它的价值更麻烦。我发现模型继承有用的一种情况是连接到在同一个表中有多个非常不同的实体的遗留数据库,但这里的情况看起来不像。
-
也许在你的作用域的
apply()方法中试试这个:$builder->whereHas('team_user', function ($query) { $query->wherePivot('isLeader', true); });
标签: php laravel eloquent relationship