Laravel Eloquent, вернуть JSON с объектом ownTo?

У меня есть две модели с отношением "один ко многим".

class User extends ConfideUser {

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

}

class Shout extends Eloquent {

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

}

Кажется, это нормально работает. НО, как мне получить это, чтобы вернуть объект пользователя, вложенный в объекты крика? Прямо сейчас он возвращает только все мои крики, но у меня нет доступа в 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"}]

person Emin    schedule 24.05.2013    source источник
comment
В настоящее время я также создаю API на Laravel, и я настоятельно рекомендую изучить находчивые контроллеры и вложенные ресурсы. Вот также хороший учебник по этой теме: tutsplus.com/lesson/nested-resources   -  person Torkil Johnsen    schedule 08.08.2013


Ответы (4)


У меня была такая же проблема с Laravel 5. Просто хотел добавить, что я заставил его работать, используя метод Model::with("relationship")->get() на модели.

person Community    schedule 24.09.2015

Я понял.

Метод должен называться user (), а не users () при работе с отношением ownTo.

Имеет смысл.

И вроде работает.

person Emin    schedule 24.05.2013

Если вы используете:

protected $visible = ['user'];

Не забудьте добавить отношения, чтобы их было видно в JSON.

person Mantas D    schedule 18.08.2015

Вы можете использовать protected $with = ['users']; в Class Shout и использовать 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;
});
person Chando    schedule 18.11.2017