在laravel eloquent

时间:2017-01-27 15:53:52

标签: php laravel-5 eloquent laravel-eloquent

这是我的Laravel 5.3项目的模型结构,

  • User.php (型号)

它有一个邀请方法,可以返回用户的邀请。

public function invitations()
{
    return $this->hasMany( 'App\Invitation', 'invitee_id', 'id' );
}
  • Invitation.php (型号)

此模型还有另一种方法可以返回邀请的邀请者详细信息。

public function inviter()
{
    return $this->hasOne( 'App\User', 'id', 'invited_by' );
}

如果我想检索当前用户的所有邀请,那么

\Auth::user()->invitations;

但如果我试图获取有关邀请者的信息,它就不会工作! (问题:怎么做?)

\Auth::user()->invitations->inviter;

虽然我可以从这样的邀请雄辩对象中查询邀请者,

\App\Invitation::first()->inviter;

但是当我尝试从用户模型访问它时,这不起作用 - >邀请 - >邀请! 我也可以在这里使用急切加载吗?

1 个答案:

答案 0 :(得分:1)

\Auth::user()->invitations->inviter;

看着这一点,您似乎正在尝试从邀请的集合中检索邀请者属性。 Ken's suggestion使用\App\Invitation::first()->inviter;的原因是因为您只检索了一个邀请的邀请者(在本例中是第一个)。要解决此问题,请在尝试检索每个邀请的属性之前遍历您的邀请:

$invitations = \Auth::user()->invitations;

foreach ($invitations as $invitation) {
    $inviter = $invitation->inviter;
}

Laravel Collections还有an each() method专用于你的对象。