概要
ここではモデルを使った基本の流れを整理する。
- フォームで入力したデータをデータベースに登録
- データベースのデータを表示
- 登録されたデータを編集・更新
- 登録されたデータの削除
例として、短いコメントを書き込む掲示板を想定する。
設定
ユーザー認証機能を実装。
データとしてユーザーが入力した投稿記事を扱う。
- モデルは投稿記事を表す
Post
- コントローラーは
PostController
posts
に対するリソースルーティングを使う
準備
モデル
artisanでモデルを作成。
1 |
$ php artisan make:model Post |
マイグレーションファイルを編集し、マイグレート。
- 投稿本文は
comment
とし、200文字の文字列 - 自動生成される
timestamps
をdatetime
型のcreated_at
とupdated_at
に変更(2038問題対応) user_id
はusers
のid
を外部キーとして持つ
→外部キー参照
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public function up() { Schema::create('posts', function (Blueprint $table) { $table->bigIncrements('id'); // ユーザーIDの外部キー $table->unsignedBigInteger('user_id'); // コメント本文 $table->string('comment', 200); // $table->timestamps(); $table->datetime('created_at'); $table->datetime('updated_at'); // 外部キー制約設定 $table->foreign('user_id')->references('id')->on('users') ->onUpdate('cascade') ->onDelete('cascade'); } |
コントローラー
artisanでコントローラーを作成。
1 |
$ php artisan make:controller PostController |
ルーティング
posts
に対してPostController
を割り当てるリソースルーティングを記述。
1 |
Route::resource('posts', 'PostController'); |
Postモデルに関するリソースルーティングは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ php artisan route:list +--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+ ........ | | POST | posts | posts.store | App\Http\Controllers\PostController@store | web,auth | | | GET|HEAD | posts | posts.index | App\Http\Controllers\PostController@index | web,auth | | | GET|HEAD | posts/create | posts.create | App\Http\Controllers\PostController@create | web,auth | | | GET|HEAD | posts/{post} | posts.show | App\Http\Controllers\PostController@show | web,auth | | | DELETE | posts/{post} | posts.destroy | App\Http\Controllers\PostController@destroy | web,auth | | | PUT|PATCH | posts/{post} | posts.update | App\Http\Controllers\PostController@update | web,auth | | | GET|HEAD | posts/{post}/edit | posts.edit | App\Http\Controllers\PostController@edit | web,auth | ........ |
アクセス制限
ログインユーザーのみページを見ることができるようアクセス制限をかける場合は、PostController
のコンストラクターでミドルウェアを指定する。
1 2 3 4 5 6 7 8 |
class PostController extends Controller { public function __construct() { $this->middleware('auth'); } .... } |
データの操作