将表单发送的参数传递给Laravel 5.2中的控制器

时间:2016-08-11 19:35:55

标签: php mysql laravel controller

我是Laravel编程的新手,现在我想用普通的PHP从2个表(项目和图片)中删除我可以这样做:

从项目中删除项目:

$sql1 = delete * from projects where project_id = 1;

删除他所有的照片

$sql2 = delete * from pictures where project_id = 1;

我想在我的route.php这里做我的代码

Route::delete('/project/{project}', function (Project $project) {
    DB::table('pics')->where('projectId', '=', $project)->delete();
    $project -> delete();
    return redirect('/');
});

我可以删除项目但不能删除它的图片吗?

我该怎么办?

2 个答案:

答案 0 :(得分:1)

您正在使用类型提示:

{{getClientName(job)}}

所以当你这样做时:

... (Project $project) { ...

你真的在说“projectId等于这个对象”。

您有两种选择。要么1)不要使用类型提示:

DB::table('pics')->where('projectId', '=', $project)->delete();

或2)正确使用类型提示:

Route::delete('/project/{project}', function ($project) {
    DB::table('pics')->where('projectId', '=', $project)->delete();
    $project -> delete();
    return redirect('/');
});

答案 1 :(得分:0)

那么我想在上一个答案中添加更多内容,只是说为什么就是这样。

你在这里可以做的只是

Route::delete('/project/{project}', function (Project $project) {
    DB::table('pics')->where('projectId', '=', $project->id)->delete();
});

那是因为 Laravel 会自动从其ID构建$project对象,所以如果你想使用id删除它,你必须从Project对象中检索它$project->id

此功能称为路线模型绑定

  

Laravel路径模型绑定提供了一种将模型实例注入路径的便捷方法。例如,您可以注入与给定ID匹配的整个Project模型实例,而不是注入用户的ID。

查看更多https://laravel.com/docs/5.2/routing#route-model-binding