Несоответствие функции show - PullRequest
0 голосов
/ 13 октября 2019

Я работаю над проектом уже несколько месяцев, и мне кажется, что я вижу некоторое несоответствие с тем, как работает публичная функция

У меня есть модель и контроллер для Местоположение , которое имеет

public function show(Location $Location)
{
    $Loc = Location::with('company:id,name')->findOrFail($Location); 
    return response()->json($Loc,200);
}

и работает просто отлично. Обратите внимание на параметры.

Я только что создал новую модель и контроллер для Актив , и он имеет следующее:

public function show(Asset $asset)
{ 
    $AssetReturn = Asset::with('location:id,name,address')->findOrFail($asset);
    return response()->json($AssetReturn,200);
}

, но это не работает. он просто возвращается пустым. Если я удаляю имя класса из параметров, чтобы оно просто

public function show($asset)

, тогда оно работает как задумано.

отношение от модели актива к местоположению:

public function location()
    {
        return $this->belongsTo(Location::class);
    }

1 Ответ

0 голосов
/ 13 октября 2019

Согласно документации , Laravel автоматически разрешает модели Eloquent, определенные в маршрутах или действиях контроллера, чьи имена переменных с подсказками типов соответствуют имени сегмента маршрута. Например:

Route::get('/assets/{asset}', function (App\Asset $asset) {
    $asset->load('location:id,name,address');
    return response()->json($asset);
});

Поскольку переменная $asset подсказывает тип как модель App\Asset Eloquent и имя переменной соответствует сегменту {asset} URI, Laravel автоматически внедрит экземпляр модели, который имеетидентификатор, соответствующий соответствующему значению из URI запроса. Если соответствующий экземпляр модели не найден в базе данных, автоматически будет сгенерирован ответ HTTP 404.

Если вы не хотите использовать это поведение и хотите использовать findOrFail вручную:

Route::get('/assets/{asset}', function ($assetId) {
    $asset = App\Asset::with('location:id,name,address')->findOrFail($assetId);
    return response()->json($asset);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...