Laravel多对多的关系

时间:2014-07-16 16:20:37

标签: php laravel orm relational-database eloquent

我正在尝试在我的Web应用程序中处理多对多的关系。我有一个名为groups和table的表,称为users。

许多用户可以在许多组中,并且许多组可以拥有许多用户。即可以有无限量的用户和群组,用户可以根据自己的意愿属于多个群组。

我创建了一个成功的数据透视表,我的模型看起来像这样。

user.php的

<?php

类用户扩展\ Eloquent {

protected $fillable = [];

protected $table = 'user';

public function groups()
{
    return $this->belongsToMany('Group');
}

}

Group.php

class group extends \ Eloquent {

protected $fillable = [];

public function users()
{
    return $this->belongsToMany('User');
}

}

我正试图掌握Eloquent ORM,我正在做以下事情,

public function get($id)
{

    //dd(Activity::log());
    $group = Group::find($id);

    return $group->users;

}

返回看起来像这样的结果

[
{
    "id": "1",
    "firstname": "User",
    "surname": "One",
    "email": "email@domain.com",
    "password": "password",
    "remember_token": null,
    "created_at": "-0001-11-30 00:00:00",
    "updated_at": "-0001-11-30 00:00:00",
    "pivot": {
        "group_id": "1",
        "user_id": "1"
    }
},
{
    "id": "2",
    "firstname": "User",
    "surname": "Two",
    "email": "email@domain.com",
    "password": "password",
    "remember_token": null,
    "created_at": "-0001-11-30 00:00:00",
    "updated_at": "-0001-11-30 00:00:00",
    "pivot": {
        "group_id": "1",
        "user_id": "2"
    }
}

这并不是我想要的,我希望我能得到更明确的内容,这意味着返回的行包括组名等,以及用户详细信息。

要获取组详细信息,我可以在get()函数中切换查询,然后返回结果中的数据透视对象将成为用户详细信息。为了获得用户数据,我是否需要对该数据进行进一步的查询。

基本上我希望长期输出的是,

Group Name 1
---------------------------------
Members
---------------------------------
    User One
    User Two
    User Five
    User Six
    User Ten
    User Nineteen

1 个答案:

答案 0 :(得分:3)

听起来你想要一个由模型组成的对象,附加到它的关系 - 称为&#34;渴望加载&#34;在laravel。有一种语法:

Group::find($id)->with('users')->first() //or
Group::with('users')->get() //etc.

在此处查看更多详情:http://laravel.com/docs/eloquent#eager-loading