Laravel Eloquent,用“belongsTo”对象返回JSON?

时间:2013-05-24 16:51:00

标签: orm laravel laravel-4 eloquent

我有两个具有一对多关系的模型。

class User extends ConfideUser {

    public function shouts()
    {
        return $this->hasMany('Shout');
    }

}

class Shout extends Eloquent {

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

}

这似乎工作正常。 但是,如何让它返回嵌套在shout对象中的users对象? 现在它只返回我的所有Shouts,但我没有JSON访问所属用户模型。

Route::get('api/shout', function() {
    return Shout::with('users')->get();
});

这只返回这个JSON,每个喊声都没有用户对象:

[{"id":"1","user_id":"1","message":"A little test shout!","location":"K","created_at":"2013-05-23 19:51:44","updated_at":"2013-05-23 19:51:44"},{"id":"2","user_id":"1","message":"And here is an other shout that is a little bit longer...","location":"S","created_at":"2013-05-23 19:51:44","updated_at":"2013-05-23 19:51:44"}]

4 个答案:

答案 0 :(得分:4)

我在使用Laravel 5时遇到了同样的麻烦。只是想补充一点,我在模型上使用Model::with("relationship")->get()方法让它工作。

答案 1 :(得分:2)

我明白了。

在使用“belongsTo”关系时,该方法需要命名为user()而不是users()。

有道理。

似乎有效。

答案 2 :(得分:1)

如果您正在使用:

protected $visible = ['user'];

不要忘记添加关系,以便在JSON中显示

答案 3 :(得分:0)

你可以在Class Shout上使用protected $with = ['users'];并使用protected $with = ['shouts'];

并提供完整名称空间模型名称

class Shout extends Eloquent {

   protected $with = ['users'];

   public function users()
   {
    return $this->belongsTo('App\User');
   }
}

class User extends ConfideUser {

    protected $with = ['shouts'];

    public function shouts()
    {
        return $this->hasMany('App\Shout');
    }
}

收到它

Route::get('api/shout', function() {
    return Shout::all()->toJson;
});