📅  最后修改于: 2023-12-03 14:43:46.188000             🧑  作者: Mango
在使用 Laravel 开发应用程序的过程中,经常需要创建模型、控制器和迁移。通常情况下,我们需要分别执行 php artisan make:model
、php artisan make:controller
和 php 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 应用程序。