#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
модель