【发布时间】:2022-01-05 03:30:08
【问题描述】:
我创建了资源控制器,在我的 laravel 5.8 项目中每个模型一个。我希望 show 函数根据插入在 URL 上的 id 返回我想要的 DB 元素,就像它应该做的那样。现在我直接在我的控制器上进行测试,我没有使用我模型的“thisCircuit”功能。调用索引,返回一个包含所有电路的 json。调用该节目不会返回任何内容。我该如何解决?
显示功能
public function show(circuits $circuits)
{
$circuits = circuits::findOrFail($circuits);
dd($circuits);
}
型号
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class circuits extends Model
{
protected $fillable = [
'circuitId', 'circuitRef', 'name',
'location', 'country', 'lat',
'lng', 'alt', 'url',
];
protected $primaryKey = 'circuitId';
public function races()
{
return $this->hasMany('App\races', 'circuitId');
}
public function allCircuits(){
$data = Circuits::all();
return response()->json($data);
}
public function thisCircuit($id){
$id = circuits::findOrFail($id);
}
}
Web.php 文件
Route::get('/test', 'CircuitsController@index');
Route::get('/test/{circuit}', 'CircuitsController@show');
浏览器上的网址
http://localhost:8000/test/1
浏览器上的结果
Illuminate\Database\Eloquent\Collection {#947 ▼
#items: []
}
【问题讨论】:
-
您已经从方法参数中获得了
$circuits。 (可能还想将您的模型重命名为单数Circuit) -
@brombeer 是对的,Laravel 会自动为你处理这个问题。这称为路由模型绑定,可以在文档中找到:laravel.com/docs/5.8/routing#route-model-binding 如果您真的不希望发生这种情况,您可以简单地删除变量类型(所以只写 $circuits 作为参数)
-
谢谢。删除变量类型解决了它。
-
@GkChris99 请问您为什么这样做而不使用路由模型绑定?有了这个,你可以简单地删除 $circuits =circuits::findOrFail($circuits);在您的代码中并具有相同的效果? :)
标签: laravel database model controller show