Laravel 用于 CRUD 的控制器,无需在控制器的方法中查询数据库
Laravel Controller for CRUD without querying Database inside Controller's methods
是否可以在 CRUD 方法中传递正确的模型 object 而无需在方法本身内部查询数据库?
如果您查看 DOC,您会发现控制器的方法接受来自 URL 的 ID 作为参数。
https://laravel.com/docs/5.7/controllers
但是,如果您使用 artisan CLI 生成控制器,那么这些方法不接受 ID 作为参数,而是接受请求 objects 和/或模型 object,例如 Post$post。
那么,我如何确定 Laravel 正确地为我查询数据库并将模型作为参数传递?如果我尝试这样做,视图会正确呈现,但数据不会作为响应传递。
DOCS 中的示例方法
/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/
public function show($id)
{
return view('user.profile', ['user' => User::findOrFail($id)]);
}
来自 CLI 生成的控制器的示例方法
/**
* Display the specified resource.
*
* @param \App\Order $order
* @return \Illuminate\Http\Response
*/
public function show(Order $order)
{
//
}
注意参数的不同。
已运行 Artisan 命令
php artisan make:model 命令-mcr
参考:https://quickadminpanel.com/blog/list-of-16-artisan-make-commands-with-parameters/
解决方案
你没看https://laravel.com/docs/master/routing#route-model-binding,在AppServiceProvider的boot中Explicit Binding和Router中定义模型如下:
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Route::model('ordini', \App\Order::class);
}
我想你正在寻找路由模型绑定
https://laravel.com/docs/master/routing#route-model-binding
如果你有像 user/{user}
这样的路由,你可以使用类型提示解析用户模型
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Store a new user.
*
* @param \App\User $user
* @return Response
*/
public function store(\App\User $user)
{
$name = $user->name;
//
}
}
是否可以在 CRUD 方法中传递正确的模型 object 而无需在方法本身内部查询数据库?
如果您查看 DOC,您会发现控制器的方法接受来自 URL 的 ID 作为参数。
https://laravel.com/docs/5.7/controllers
但是,如果您使用 artisan CLI 生成控制器,那么这些方法不接受 ID 作为参数,而是接受请求 objects 和/或模型 object,例如 Post$post。 那么,我如何确定 Laravel 正确地为我查询数据库并将模型作为参数传递?如果我尝试这样做,视图会正确呈现,但数据不会作为响应传递。
DOCS 中的示例方法
/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/
public function show($id)
{
return view('user.profile', ['user' => User::findOrFail($id)]);
}
来自 CLI 生成的控制器的示例方法
/**
* Display the specified resource.
*
* @param \App\Order $order
* @return \Illuminate\Http\Response
*/
public function show(Order $order)
{
//
}
注意参数的不同。
已运行 Artisan 命令
php artisan make:model 命令-mcr 参考:https://quickadminpanel.com/blog/list-of-16-artisan-make-commands-with-parameters/
解决方案
你没看https://laravel.com/docs/master/routing#route-model-binding,在AppServiceProvider的boot中Explicit Binding和Router中定义模型如下:
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Route::model('ordini', \App\Order::class);
}
我想你正在寻找路由模型绑定 https://laravel.com/docs/master/routing#route-model-binding
如果你有像 user/{user}
这样的路由,你可以使用类型提示解析用户模型
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Store a new user.
*
* @param \App\User $user
* @return Response
*/
public function store(\App\User $user)
{
$name = $user->name;
//
}
}