【发布时间】:2019-05-31 05:22:43
【问题描述】:
我有三个模型,Clinic、Department 和 ClinicDepartment,并且使用 ClinicDepartment 的表作为数据透视表,从 Clinic 到 Department 的 belongsToMany 关系称为 departments,但是当我使用这种关系,ClinicDepartment 的范围不适用于查询。
我决定让 Pivot 模型调用 ClinicDepartmentPivot并将这些范围应用于 Pivot,但没有运气。
临床模型:
class Clinic extends Model
{
use SoftDeletes, ActiveOnly, HasParent;
public function departments()
{
return $this->belongsToMany(Department::class, 'clinic_departments', 'clinic_id', 'department_id')->using(ClinicDepartmentPivot::class);
}
}
部门模型:
class Department extends Model
{
use SoftDeletes, ActiveOnly;
public function clinics()
{
return $this->belongsToMany(Clinic::class, 'clinic_departments', 'department_id', 'clinic_id')->using(ClinicDepartmentPivot::class);
}
}
ClinicDepartmentPivot 模型:
class ClinicDepartmentPivot extends Pivot
{
use ActiveOnly, SoftDeletes;
}
ActiveOnlyScope:
class ActiveOnlyScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
$builder->where($model->getTable() . '.is_active', true);
}
}
所以基本上我想将全局范围应用于 Pivot 模型,所以当我尝试获取部门诊所时,它应该检查 - ClinicDepartment 是否有 is_active = 1 并且没有被删除。
UPD 1
我的作用域特征如下所示:
trait ActiveOnly
{
public static function bootActiveOnly()
{
if (!Auth::guard('admin')->check() && strpos(request()->getRequestUri(), 'admin') === false) {
static::addGlobalScope(new ActiveOnlyScope);
}
}
}
任何型号都可以使用。
【问题讨论】:
标签: php laravel eloquent laravel-5.5