📌  相关文章
📜  laravel 一次性制作模型控制器和迁移 - PHP (1)

📅  最后修改于: 2023-12-03 14:43:46.188000             🧑  作者: Mango

Laravel 一次性制作模型控制器和迁移 - PHP

在使用 Laravel 开发应用程序的过程中,经常需要创建模型、控制器和迁移。通常情况下,我们需要分别执行 php artisan make:modelphp artisan make:controllerphp artisan make:migration 命令。但是如果我们需要一次性创建它们呢?在本篇文章中,我们将介绍如何使用 Artisan 的 make:model 命令来创建模型、控制器和迁移。

创建模型、控制器和迁移

要一次性创建模型、控制器和迁移,我们可以使用如下命令:

php artisan make:model Post --controller --migration

make:model 命令用于创建模型,--controller 选项用于创建控制器,--migration 选项用于创建迁移。上述命令将创建一个名为 Post 的模型,同时创建一个与之关联的控制器和迁移。

在 Controller 中,我们可以使用以下代码获取所有 Post:

public function index()
{
    $posts = Post::all();

    return view('posts.index', compact('posts'));
}

在 Migration 中,我们可以使用以下代码定义 Post 表的结构:

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->text('body');
        $table->timestamps();
    });
}

public function down()
{
    Schema::dropIfExists('posts');
}

在 Model 中,我们可以使用以下代码定义 Post 模型的属性和关联:

class Post extends Model
{
    protected $fillable = [
        'title', 'body'
    ];

    public function user()
    {
        return $this->belongsTo('App\User');
    }

    public function comments()
    {
        return $this->hasMany('App\Comment');
    }
}

上述代码中,fillable 属性定义了允许批量赋值的字段,user 方法定义了 Post 所属的 User,comments 方法定义了 Post 拥有的 Comment。

自定义模板

当我们使用 make:model 命令创建模型、控制器和迁移时,可以使用 --template 选项指定自定义模板。自定义模板可以根据我们的需求设置默认值,从而减少输入的次数。

下面是一个自定义模板的示例:

php artisan make:model Post --controller --migration --template=template.txt

template.txt 文件的内容如下:

{{appNameSpace}}

class {{class}} extends Model
{
    protected $fillable = [];

    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);

        $this->table = '{{table}}';
    }

    public function user()
    {
        return $this->belongsTo('App\User');
    }

    public function comments()
    {
        return $this->hasMany('App\Comment');
    }
}

namespace App\Http\Controllers;

use App\{{class}};
use Illuminate\Http\Request;

class {{class}}Controller extends Controller
{
    public function index()
    {
        ${{variable}} = {{class}}::all();

        return view('{{table}}.index', compact('{{variable}}'));
    }

    public function create()
    {
        return view('{{table}}.create');
    }

    public function store(Request $request)
    {
        $request->validate([
            //
        ]);

        {{class}}::create([
            //
        ]);

        return redirect()->route('{{table}}.index')->with('success', 'Created successfully.');
    }

    public function show({{class}} ${{variable}})
    {
        return view('{{table}}.show', compact('{{variable}}'));
    }

    public function edit({{class}} ${{variable}})
    {
        return view('{{table}}.edit', compact('{{variable}}'));
    }

    public function update(Request $request, {{class}} ${{variable}})
    {
        $request->validate([
            //
        ]);

        ${{variable}}->update([
            //
        ]);

        return redirect()->route('{{table}}.index')->with('success', 'Updated successfully.');
    }

    public function destroy({{class}} ${{variable}})
    {
        ${{variable}}->delete();

        return redirect()->route('{{table}}.index')->with('success', 'Deleted successfully.');
    }
}

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class {{class}} extends Migration
{
    public function up()
    {
        Schema::create('{{table}}', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('{{table}}');
    }
}

当执行上述命令时,将使用 template.txt 文件来生成模型、控制器和迁移。例如,我们可以将 {{table}}{{variable}} 替换为 Post 和 posts,以便生成正确的文件。

结论

通过本文的介绍,我们了解到如何使用 make:model 命令一次性创建模型、控制器和迁移,以及如何自定义模板来减少输入的次数。这些技巧可以让我们更高效地开发 Laravel 应用程序。