Внедрение модели и возвращаемого значения «с» в контроллер в laravel - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь построить приложение на Laravel, и я хочу знать, можем ли мы использовать отношение with при внедрении модели в функцию контроллера, например:

У меня есть модель с именемStream и у меня есть модель с именем Standard.Standard принадлежит Stream, поэтому мой код выглядит следующим образом:

class Standard extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $guarded = [];

    public function stream()
    {
        return $this->belongsTo('Models\Stream', 'stream_id', 'id');
    }
}

Теперь в моем StandardController есть следующая функция для отображения модели:

public function show(Standard $standard)
{
    return response()->json(['data' => $standard], 200);
}

I 'Я пытаюсь использовать return response()->json(['data' => $standard->with('stream')], 200);, но он не работает соответственно.Может кто-нибудь предложить мне, как выполнить в таком сценарии.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

У вас есть несколько вариантов:

1) Вы можете использовать Ресурсы API .Это мой предпочтительный подход.

2) Если API Resources не ваша чашка чая, вам просто нужно как-то загрузить отношения.Один из способов сделать это - $standard->load('stream').Другой способ - просто получить доступ к отношению: $standard->stream.

. Здесь происходит то, что любые доступные отношения превращают его в ключ модели relations, что делает сериализацию json по умолчанию немного непредсказуемой.В связи с этим я предпочитаю явно указывать ресурсы API.

3) Вы можете изменить массив $with модели Standard, включив в него stream, но я не фанат этого подходапоскольку это означает, что каждый раз, когда Standard записи извлекаются, они автоматически извлекают отношение stream.

with() - это метод, который вы вызываете для объекта Eloquent Builder, который извлекает отношения для Стремительная загрузка .В этом случае вы работаете с Model экземпляром, а не с Eloquent Builder.

0 голосов
/ 05 марта 2019

пожалуйста, попробуйте этот код.более подробное объяснение доступно по адресу laravel docs

$standard->load('stream');
return response()->json(['data' => $standard], 200);
0 голосов
/ 05 марта 2019

with() для тех случаев, когда вы изначально получаете модели.Если у вас уже есть модель (ы), вы можете вместо этого использовать load().Это называется отложенная загрузка .

public function show(Standard $standard)
{
    $standard->load('stream');

    return response()->json(['data' => $standard], 200);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...