えんつかです。PHPフレームワークのLaravelを学習しています。
WEB開発の基本であるCRUDは重要ですよね。
CRUDは、Create Read Update Deleteの略で、文字通りですが、作成、読み込み、更新、削除を行う機能をまとめて、呼んでいます。
本記事では、CRUD機能の基本的な方法をまとめました。
本記事を読むことで、LaravelでCRUD機能が作成できると思います。
それでは、いきましょ〜
【Laravel】CRUD機能の基本的な作成方法
作成イメージ
CRUDを用いて、ToDoタスクの作成、表示、更新、削除を行うことをイメージして、解説していきます。

モデル作成
CRUD機能は、モデル(Model)・ビュー(View)・コントローラー(Controller)を用いていきます。
このMVCモデルは、Laravelを用いる上での基本的な考え方で役割分担させています。
まずプロジェクトフォルダに移動して、以下のコマンドをターミナルを実行です。
モデルを作成します。
php artisan make:model モデル名
以下の様に記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class モデル名 extends Model { // 自動でidが割り振られる為 // $guardedを用いて、idを「値を用意しておかない項目」に指定 protected $guarded = array('id'); } |
テーブル作成
データを格納するテーブルを作成します。
ここでは、MySQLを用います。
マイグレーションを用いますので、やり方は過去記事を参考にして下さい。
作成するマイグレーションファイルには、次の様に記述です。
php artisan make:migration create_テーブル名_table
作成されたマイグレーションファイルには以下の様に記述です。
作成するカラム名(coment, status)は、任意に変更して下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateBoardsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { // テーブルの作成(マイグレーション) Schema::create('テーブル名', function (Blueprint $table) { $table->increments('id'); $table->string('coment'); $table->string('status'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('テーブル名'); } } |
入力が完了したら、データベースに反映させます。
php artisan migrate
これで、テーブルにカラムが反映されています。
エラーが発生する場合、過去記事を参考にして下さい。
コントローラー作成
コントローラーを準備していきます。
コントローラーの作成は、以下のコマンドで実行できます。
php artisan make:controller コントローラーファイル名
コントローラーには、以下の様に記述します。
全て載せちゃいます。
説明もコード内に記載していますので参考にして下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<?php namespace App\Http\Controllers; // 使用するモデルの宣言 use App\モデル名; use Illuminate\Http\Request; use App\Http\Requests\BoardRequest; class boardController extends Controller { //全データ画面表示(Read) public function index(Request $request) { // DBデータの抽出 // DBデータを$itemsに格納 $items = モデルクラス名::all(); return view('ToDoApp.index', compact('items')); } // データの作成(Create) public function store(フォームリクエスト $request) // バリデーションはフォームリクエストから実施 { // 入力フォームデータをDBへ保存 // インスタンスの作成 $board = new モデルクラス名; //送信されたフォームデータ全てを$itemsへ格納 $items = $request->all(); unset($items['_token']); // インスタンスにデータをまとめて設定して保存 $board->fill($items)->save(); // todoへリダイレクト return redirect('todo'); } // ルーティングより割り振られた内容を実施 // データの削除(Delete) public function remove(Request $request) { //タスク削除 モデルクラス名::find($request->id)->delete(); // タスク削除後todoにリダイレクト(画面は遷移せずそのままを維持) return redirect('todo'); } // ルーティングより割り振られた内容を実施 // データの更新(Update) public function update(Request $request) { // 入力フォームデータをDBへ保存 // モデルクラス名::findでidレコード検索 $board = モデルクラス名::find($request->id); // 送信されたフォームデータ全てを$itemsへ格納 $items = $request->all(); unset($items['_token']); // インスタンスにデータをまとめて保存 $board->fill($items)->save(); // todoへリダイレクト return redirect('todo'); } } |
ビュー作成
ビューの作成については、趣味嗜好の話になってくるので、ここは割愛いたします。
参考までに、考え方としては、
@foreach($items as $item)
として、格納したデータを$itemに連想配列で取得します。
$itemにデータを格納しましたら、{{ $item->coment }}の様な形で出力させてください。
なお、ビュー内のform先は以下の様に割り振りました。
1 2 3 4 5 6 |
<!-- Create --> <form action="todo" method="post"> <!-- Update --> <form action="todo/update/{{$item->id}}" method="post"> <!-- Delete --> <form action="todo/del/{{$item->id}}" method="post"> |
なお、formを入力したら必ずCSRF対策を実施して下さい。
{{ csrf_field() }} もしくは @csrf
をform内に入力です。入力がないと、419エラーページが返されます。
formのaction先(ルーティング)
ルーティング先(web.php)は以下の様に割り振ります。
1 2 3 4 5 6 |
Route::get('todo', 'コントローラー名@index'); Route::post('todo', 'コントローラー名@store'); // 削除ボタンからPOSTされた内容をremoveメソッドに割り振る Route::post('todo/del/{id}', 'コントローラー名@remove'); // 作業中/完了ボタンからPOSTされた内容をupdateメソッドに割り振る Route::post('todo/update/{id}', 'コントローラー名@update'); |
以上です。