Мне нужно отфильтровать результаты, полученные из отношения один ко многим, непосредственно из объекта модели, но я не могу найти правильный путь.
Здесь отношения:
У меня есть модель User, которая может работать со многими компаниями (модель компании), и у компании может быть подписано много пользователей, поэтому отношение «многие ко многим».
В каждой компании этот пользователь имеет личную информацию, поэтому у каждого пользователя может быть много профилей (модель профиля), по одному для каждой компании, на которую подписан.
Так что это отношение один ко многим.
Представьте, что я хочу получить компанию, которую пользователь в данный момент просматривает, непосредственно из модели, что, я достигаю, отфильтровав отношение многие ко многим:
class User extends Authenticatable
{
///
public function obtainLoggedOnCompany()
{
return $this->belongsToMany('app\Company', 'user_company', 'id', 'company_id')->withPivot('selected')->wherePivot('selected', 1)
}
Затем, если я хочу вернуть выбранную компанию в режиме блэйда, я просто звоню:
Auth :: пользователя () -> obtainLoggedOnCompany-> первый ();
Все благодаря предложению withPivot и wherePivot.
Другой случай, когда я хочу получить зарегистрированный профиль выбранной в данный момент компании, я попытался:
public function obtainSelectedProfile()
{
$SelectedCompany= $this->obtainLoggedOnCompany->first();
return $this->hasMany('app\Profile','user_id')->where('company_id', '=', $SelectedCompany->company_id);
}
Но он бросает попытку получить свойство Exception, не являющееся объектом.
Есть ли другой способ отфильтровать отношения один ко многим непосредственно в функции отношения модели?
Я использую Laravel 5.2