如何在laravel中建立雄辩的关系?

Lea*_*awk 6 php laravel eloquent laravel-5

到目前为止,我将关系对象提取为数组,然后执行以下操作:

App\Model::find($id)
Run Code Online (Sandbox Code Playgroud)

但是有没有办法做一些事情:

Auth::user()->group()->members()
Run Code Online (Sandbox Code Playgroud)

它可以工作,Auth::user()->group但没有进一步的链接.如果你做了什么,请帮忙.或者我只是新手.

Jon*_*hon 15

您可以使用预先加载来加载用户的组,然后加载该组的所有成员.

$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
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您基本上想要将结构跳到一个级别,并获得与用户相关的所有成员,则可以hasManyThrough通过组使用该关系,因为用户具有许多成员.

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

这样您就可以直接通过用户访问成员:

$members = Auth::user()->members;
Run Code Online (Sandbox Code Playgroud)

Laravel不使用查询来访问用户的组,然后再进行另一个查询来访问该组的成员,而是使用带有连接的单个查询来获取成员.

看看这里的hasManyThrough关系


Vik*_*ash 5

尝试这个

Auth::user()->group->members
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这是有效的,因为 `group()` 是一个 `belongsTo` 关系,当使用动态属性访问时,会返回一个 `Group` 模型 (2认同)