Как запросить через вложенные отношения Laravel красноречивым способом ORM - PullRequest
0 голосов
/ 05 марта 2019

У меня отношения почти на 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.

1 Ответ

0 голосов
/ 28 мая 2019

Вы можете использовать этот пакет для своих нужд.

https://github.com/staudenmeir/eloquent-has-many-deep

прочитайте инструкцию, глубина отношений не ограничена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...