0
  1. 我有两个这样的表:

用户

id      email
1     abc@ibm.com
2     abc@hp.com
3     abc@google.com

grp_members

grp_id    user_id
1          2
2          2
13         1
13         3

2.我的模型

在那里,一个组成员必须是一个用户,所以它只是 GroupMember 的一对一关系。

关于表用户的用户模型

class Users extends Eloquent {
    protected $table = "users";
}

关于表 group_members 的 GroupMember 模型

class GroupMember extends BaseModel{

    protected $table = "grp_members";

    public function user(){
        return $this -> hasOne('Users', 'id');
    }
}

3.在我的服务GroupApi.php中,如果我有这样的查询

class GroupApi {

    public function queryGroupMembers(){

        $result = GroupMember::all();

        var_dump(get_class(GroupMember::all())); //CODE ONE

        foreach($result as $ret){
            var_dump(get_class($ret));  //CODE TWO
            var_dump(get_class($ret -> user));  //CODE THREE
        }
    }
}

如您所见,当我var_dump(get_class(GroupMember::all()))CODE ONE调用时,我得到了这个

.string(39) "Illuminate\Database\Eloquent\Collection"

是的,这就是我想要的。

现在,在CODE TWO,它打印

string(11) "GroupMember"

是的,也是正确的对象,但是当代码转到CODE THREE时,它给了我一个惊喜,输出如下:

string(8) "GroupApi"

为什么它是 GroupApi 的实例,而不是Usersor的实例GroupMember

在那种情况下,我该如何调用$ret -> user

欢迎任何想法,非常感谢。

4

2 回答 2

0

好的,我猜你有 3 张桌子:

用户;grp_members; 团体

以及使用表 grp_members 作为数据透视表的用户和组之间的多对多关系。

在这种情况下,试试这个:

班级用户:

class User extends Eloquent {

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

}

班级组:

class Group extends Eloquent {

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

}

并且还将表“grp_members”中的字段名称从 grp_id 更改为 group_id,以遵循 eloquent 约定。

于 2013-10-21T14:13:34.300 回答
0

有些事情我不确定我在你的实现中是否理解,但可能会给你带来麻烦的事情是没有使用Laravel 要求的约定,即使用 User 作为模型名称和 users (model + s) 作为表名称.

另外,我猜 $g1 不是您建议的 GroupMember 对象,您可以 getClass() 并确认吗?

于 2013-10-21T09:59:23.580 回答