Возможно, я не понимаю, но, возможно, я бы выбрал самый простой подход, если тип члена не важен.
Таблица уже настроена на обработку принадлежащего объекта, или morphMany, поэтому создайте связь в классе Member (или, если у вас нет родительского класса члена, прикрепите его к каждому из типов Person, Инцидент и т. Д. Конечно, вы также можете сделать это через поли, но это простой пример, чтобы получить то, что вам нужно):
public function appointments()
{
return $this->belongsToMany(Appointment::class)->withPivot('member_type');
}
А затем просто запросите объект-член, для которого вам нужны встречи(наличие poly сделало бы этот шаг):
$allAppointmentsForID = $member->appointments();
$appointments = $allAppointmentsForID->wherePivot('member_type', $whateverClassThisIS);
Вышеприведенное учитывает member_type.Если это не имеет значения, вы можете просто использовать верхнюю строку.
Ваш исходный БД настроен на обработку полиморфных отношений, поэтому, если вы хотели больше, чем встреча, вы можете настроить ее также.На данный момент вам нужно добавить TYPE в запрос, чтобы охватить разные классы.
Если тип члена важен, полиморфный может выглядеть примерно так в классе Member:
public function appointments()
{
return $this->morphMany(Appointment::class, 'memberableOrmember_typeOrWhatever');
}
Затем вы можете запросить объект-член всего одной строкой
$appointments = $member->appointments();