Как передать параметр туда, где в цепочке отношений Laravel Eloquent

У меня возникли проблемы с цепочкой нескольких отношений в Laravel при добавлении предложения where к отношению:

Модель пользователя: отношение "один ко многим" к профилям пользователей

столбцы: id, имя пользователя, электронная почта, текущий_регион

class User
{
 public function profile()
    {
        return $this->hasOne(Profile::class)->where('region_code',$this->current_region);

    }
}

Примечание. В этом случае я использую hasOne для получения одной записи, а отношение — oneToMany.

Модель профиля пользователя:

столбцы: имя, номер, user_id, region_code

Модель вложения:

столбцы: файл, имя, user_id, region_code

class Attachment
{
 public function owner()
    {
        return $this->belongsTo('App\User', 'user_id');
    }
}


Мне нужно получить доступ к userProfle из модели вложения.

attachment->user->userprofile; // returns null because $this->current_region is not accessible as the context for user model is not available yet

однако я могу напрямую получить доступ к userProfile из модели User

$user->userProfile // return expected response;

Как я могу передать параметр модели пользователя из модели вложения или есть лучший способ приблизиться к этому.


person Poorya    schedule 25.07.2019    source источник


Ответы (1)


Вам необходимо явным образом загрузить вложенные отношения, как описано здесь

$attachments = App\attachment::with('owner.profile')->get();

Тогда вы сможете получить доступ к профилю вот так

$profile = $attachment->owner->profile;
person Archie    schedule 25.07.2019