У меня отношения почти на 5 уровней.
В своих клинках я использую это все время без проблем.Например:
{{ $user->team->department->region->company->name ?? ''}}
Как мне поступить с запросом всех пользователей, принадлежащих компании?
$users = User::where($user->team->department->region->company->id, '=', 1)->get(); ?????
Отношения с компанией:
class Company extends Model
{
public function region() {
return $this->hasMany('App\Region', 'company_id', 'id');
}
}
Отношения по региону:
class Region extends Model
{
public function company() {
return $this->hasOne('App\Company', 'id', 'company_id');
}
public function department() {
return $this->hasMany('App\Department', 'region_id', 'id');
}
}
Отношения в отделе:
class Department extends Model
{
public function region() {
return $this->hasOne('App\Region', 'id', 'region_id');
}
public function team() {
return $this->hasMany('App\Team', 'department_id', 'id');
}
}
Отношения в команде:
class Team extends Model
{
public function department() {
return $this->hasOne('App\Department', 'id', 'department_id');
}
public function user() {
return $this->hasMany('App\User', 'team_id', 'id');
}
}
Отношения с пользователем:
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function team() {
return $this->hasOne('App\Team', 'id', 'team_id');
}
}
Я знаю, что должно бытькакой-то простой способ запроса через вложенные отношения, для которых Laravel предоставляет способ или какое-то средство, но я пока не нашел достойных примеров от Googling.