Как связать красноречивые отношения в laravel?

#php #laravel #laravel-5 #eloquent

#php #laravel #laravel-5 #красноречивый

Вопрос:

До сих пор я извлекал объекты отношений в виде массивов, а затем делал что-то вроде:

 AppModel::find($id)
 

Но, однако, есть ли способ сделать что-то вроде:

 Auth::user()->group()->members()
 

Это работает до Auth::user()->group тех пор, пока не произойдет дальнейшее объединение в цепочку. Пожалуйста, помогите, если вы что-то сделали. Или я просто новичок.

Ответ №1:

Вы могли бы использовать нетерпеливую загрузку для загрузки группы пользователя, а затем загрузить всех членов этой группы.

 $user = User::with(['group', 'group.members'])->find(1);

// OR if you already have a user object (Like when using the Auth facade)
$user = Auth::user()->load(['group', 'group.members']);

foreach ($user->group->members as $member) {
    // Do something with a member
}
 

Однако, если вы, по сути, хотите перейти на уровень ниже по структуре и получить все элементы, связанные с пользователем, вы можете использовать hasManyThrough отношения, поскольку у пользователя много членов, через группу.

 // In your User model
public function members()
{
    return $this->hasManyThrough(Member::class, Group::class);
}
 

Таким образом, вы можете просто получить доступ к участникам напрямую через пользователя:

 $members = Auth::user()->members;
 

Вместо того, чтобы выполнять запрос для доступа к группе пользователя, а затем выполнять другой запрос для доступа к членам этой группы, Laravel будет использовать один запрос с объединением, чтобы получить вам участников.

Взгляните на отношения hasManyThrough здесь

Ответ №2:

Попробуйте это

 Auth::user()->group->members
 

Комментарии:

1. Должно быть, я где-то это пропустил. Спасибо за это (:

2. Это прекрасно @TheAkashRajput. :). Приведенный выше ответ действительно более нагляден. Мы всегда должны принимать лучшее. спасибо 🙂

3. Обратите внимание, что это работает, потому group() belongsTo что это отношение, которое при обращении с использованием динамического свойства возвращает Group модель