У меня есть три модели, Clinic
, Department
и ClinicDepartment
, и отношение belongsToMany
называется departments
от Clinic
до Department
с использованием таблицы ClinicDepartment
в качестве сводной таблицы, но когда я использую это отношение, области из 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, поэтому, когда я пытаюсь получить Clinics of Department, он должен проверить - есть ли 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);
}
}
}
Может использоваться с любой моделью.