如何在Eloquent ORM中为两个一对多关系的定义赋予相同的名称

时间:2013-12-24 12:30:34

标签: php laravel laravel-4 eloquent

我正在设计一个玩具项目,这是Laravel-4中的推特克隆。我在下面的模型中有以下关系:

<?php

class Follower extends Eloquent {
    protected $guarded = array();

    public static $rules = array();

    public function user_follower()
    {
        return $this->belongsTo('User','to_user_id');
    }

    public function user_following()
    {
        return $this->belongsTo('User','from_user_id');
    }
}

用于了解用户的以下列表的查询返回Json对象,如下所示:

 [
{
    "id": 2,
    "from_user_id": 1,
    "to_user_id": 2,
    "created_at": "2013-12-15 17:40:26",
    "updated_at": "2013-12-15 17:40:26",
    "user_follower": {
        "id": 2,
        "full_name": "Shyanne Champlin",
        "username": "shyanne718",
        "created_at": "2013-12-15 14:28:53"
    }
},
{
    "id": 4,
    "from_user_id": 1,
    "to_user_id": 4,
    "created_at": "2013-12-15 17:40:26",
    "updated_at": "2013-12-15 17:40:26",
    "user_follower": {
        "id": 4,
        "full_name": "Vinnie Lang",
        "username": "vinnie398",
        "created_at": "2013-12-15 14:28:54"
    }
}
]

对于知道用户关注者的其他查询,结果“user_follower”变为“user_following”。所以我的问题是我如何为两个关系定义相同的函数名称,因此它为“跟随用户”和“关注者”返回具有相同“密钥”名称的用户“值”。

1 个答案:

答案 0 :(得分:1)

我刚刚对你的设置进行了广泛的测试,这似乎在我的工作中完全正常。

我能想到三件事:

  1. with方法的错误定义。应该是:Follower::with(array('user_follower', 'user_following'))->get();

  2. 我从不在我的方法命名中使用下划线_。我假设Laravel期待userFollower()userFollowing(),同时仍然在JSON结果中返回下划线。

  3. 你的Laravel发行版中的一个错误。只需运行composer update即可。我刚刚运行它仍然有效,所以至少目前的发行版工作正常。 (我在composer.json中使用"laravel/framework": "4.1.*",