当我尝试编辑数据库中的某些列时,例如1
,当我在地址栏上运行此网址时,我尝试调试数据:
http://127.0.0.1:8000/content_category/1/edit
我得到了这个结果:
ContentCategories {#246 ▼
#table: "contents_categories"
#guarded: array:1 [▶]
#connection: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: false
+wasRecentlyCreated: false
#attributes: []
#original: []
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#hidden: []
#visible: []
#fillable: []
}
此结果中的数据为null
,而且我没有关于id=1
这一列数据存在于数据库中,我用phpmyadmin
检查了控制器上的edit
函数:
public function edit(ContentCategories $contentCategories)
{
dd($contentCategories);
}
项目中的和Model
:
class ContentCategories extends Model
{
protected $table = 'contents_categories';
protected $guarded = ['id'];
}
路线:
Route::resource('content_category', 'ContentCategoriesController');
答案 0 :(得分:1)
您需要更新方法签名才能在此处使用隐式路由模型绑定。
“Laravel会自动解析路由或控制器操作中定义的Eloquent模型,其类型提示的变量名称与路径段名称匹配。” Laravel 5.5 Docs - Routing - Implicit Model Binding
public function edit(ContentCategories $content_category)
这会将路径参数名称与类型提示参数名称匹配。这将允许绑定发生。如果没有这些参数名称的匹配,您所拥有的typehinted参数将通过依赖注入被解析为该模型的新实例。它必须解决依赖关系,因此你得到一个新的模型实例,因为它不知道它是你想要绑定的参数。
其他信息:
“默认情况下,
Route::resource
将根据资源名称的”单一化“版本为您的资源路径创建路由参数。”
Laravel 5.5 Docs - Controllers - Resource Controllers - Naming Resource Route Parameters
答案 1 :(得分:0)
在控制器编辑方法中尝试此操作
public function edit($id)
{
$contentCategories = ContentCategories::find($id);
dd($contentCategories);
}