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;

        //
    }
}