У меня есть ModelA
, у которого много ModelB
. Зарегистрированный пользователь имеет список ModelB
, к которым он может получить доступ.
В моей модели ModelA
я пытаюсь определить отношение, чтобы получить ModelB
, связанное с ModelA
что аутентифицированный пользователь может получить доступ:
/**
* All Model Bs for this Model A that the logged in user
* can access
*/
public function modelBsAccessibleByUser()
{
/** @var User $user */
$user = \Auth::user();
return $this->hasMany(ModelA::class)
->whereIn('id', $user->getModelBsForModelA($this)->pluck('id'));
}
Проблема в том, что $this
не является ссылкой на экземпляр ModelA
, а просто пустым ModelA
.
I я посмотрел на добавление атрибута, но это не достаточно хорошо, так как мне также нужно иметь возможность выполнять вложенные где-то в части приложения отношения. Например:
$this->builder
->with([
'ModelBs',
'ModelBs.latestModelC' => function (HasOne $query) use ($carbonDate) {
$query->whereDate('modelCs.created_at', '<=', $carbonDate);
},
]);