难以捉摸的ORM多重关系


Eloquent ORM multiple relationships

有三个表。

users:
 - ...
 - some_param
admins:
 - ...
 - club_id
 - some_param
clubs:
 - id
 - title

每个用户可以有多个管理员(通过some_param相关),每个管理员可以有多家俱乐部,我想获得每个俱乐部的头衔。

所以我定义了一个关系:

class User extends Eloquent {
    public function admins() {
        return $this->hasMany('Admin', 'some_param', 'some_param');
    }
}
class Admin extends Eloquent {    
    public function clubs() {
        $this->hasMany('Club', 'id', 'club_id');
    }
}

并希望在模板中使用它:

@foreach($user->admins as $admin)
    @foreach($admin->clubs as $club)
        {{ $club->title }}
    @endforeach
@endforeach

但我在@foreach($admin->clubs as $club)行得到一个错误:Relationship method must return an object of type Illuminate'Database'Eloquent'Relations'Relation

我做错了什么?提前谢谢。

在以下函数中:

public function clubs() {
    $this->hasMany('Club', 'id', 'club_id');
}

你没有return,所以像这样使用return

public function clubs() {
    return $this->hasMany('Club', 'id', 'club_id');
}

此外,在$user变量中获取User集合时,请尝试使用热切加载,例如:

$user = User::with('admins.clubs')->find(1);

这将减少查询。