雄辩的ORM多重关系

时间:2014-11-09 18:06:12

标签: php laravel orm eloquent

有三张桌子。

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

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

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

1 个答案:

答案 0 :(得分:0)

在您的以下功能中:

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

您没有return所以请像这样使用return

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

此外,在User变量中收集$user集合时,请尝试使用eager loading,例如:

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

这会减少查询。