はじめに
laravelにはtinkerという機能があり、 php artisan tinker
コマンドを用いてデータを入れることができる。
前提条件
以下のようなテーブルがあったとする
1 2 3 4 5 6 7 8 9 10 11 |
CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `users_email_unique` (`email`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |
app\User.php
配下のModele クラスに、
ホワイトリスト形式で入力を受付けさせるようにする。
1 2 3 |
protected $fillable = [ 'name', 'email', 'password', ]; |
fillable
で宣言されたカラムがホワイトリストとして機能し、これらのカラムにデータの投入が許可される。
逆にブラックリスト形式で制御したい場合は guarded
という変数名を利用する
データ投入
tinkerを起動する
1 2 3 |
php artisan tinker Psy Shell v0.9.11 (PHP 7.2.25 — cli) by Justin Hileman >>> |
の画面が出たら、以下の通り投入したいデータを入力
1 |
post = App\User::create(['name'=>'tsukada hoge','email'=>'hoge@sumito.jp','password'=>'cccc']); |
動作確認
データを確認すると無事投入された
sample
以下のようにデータを投入する場合は、
app\User.php
配下のModele クラスを編集する必要はない。
1 2 3 4 5 6 7 8 9 10 11 |
$ php artisan tinker Psy Shell v0.9.12 (PHP 7.2.25 — cli) by Justin Hileman >>> $post = new App\Post(); => App\Post {#2894} >>> $post->title = 'title hogehoge'; => "title hogehoge" >>> $post->body = 'body hogehoge'; => "body hogehoge" >>> $post->save(); => true >>> |
データを確認したい場合
App\Post::all();
PostはMODEL名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
>>> App\Post::all(); => Illuminate\Database\Eloquent\Collection {#2903 all: [ App\Post {#2904 id: 1, title: "title 1", body: "body 1", created_at: "2019-12-09 15:02:27", updated_at: "2019-12-09 15:02:27", }, App\Post {#2905 id: 2, title: "hogehoge", body: "body hogehoge", created_at: "2019-12-09 15:04:21", updated_at: "2019-12-09 15:04:21", }, ], } >>> |
以下のように投入する場合は、エラーが発生する
1 2 3 |
>>> App\Post::create(['title'=>'title 2', 'body'=>'body 2']); Illuminate/Database/Eloquent/MassAssignmentException with message 'title' >>> |
この場合は、 app\User.php
配下のModele クラスを編集することで、投入を許可する。
※ app\User.php
を編集した後は、tinkerに入り直す必要がある。
1 2 3 4 5 6 7 8 9 10 11 |
$ php artisan tinker Psy Shell v0.9.12 (PHP 7.2.25 — cli) by Justin Hileman >>> App\Post::create(['title'=>'title 2', 'body'=>'body 2']); => App\Post {#2892 title: "title 2", body: "body 2", updated_at: "2019-12-09 15:11:31", created_at: "2019-12-09 15:11:31", id: 3, } >>> |
無事入力できた
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 |
>>> App\Post::all()->toArray(); => [ [ "id" => 1, "title" => "title 1", "body" => "body 1", "created_at" => "2019-12-09 15:02:27", "updated_at" => "2019-12-09 15:02:27", ], [ "id" => 2, "title" => "hogehoge", "body" => "body hogehoge", "created_at" => "2019-12-09 15:04:21", "updated_at" => "2019-12-09 15:04:21", ], [ "id" => 3, "title" => "title 2", "body" => "body 2", "created_at" => "2019-12-09 15:11:31", "updated_at" => "2019-12-09 15:11:31", ], ] >>> |
条件付きのデータ取得
x件目のデータを取得
1 2 3 4 5 6 7 8 9 |
>>> App\Post::find(3)->toArray(); => [ "id" => 3, "title" => "title 2", "body" => "body 2", "created_at" => "2019-12-09 15:11:31", "updated_at" => "2019-12-09 15:11:31", ] >>> |
whereを使ったデータ取得
1 2 3 4 5 6 7 8 9 10 11 |
>>> App\Post::where('id', '>', 2)->get()->toArray(); => [ [ "id" => 3, "title" => "title 2", "body" => "body 2", "created_at" => "2019-12-09 15:11:31", "updated_at" => "2019-12-09 15:11:31", ], ] >>> |
orderByを用いた並び替え
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
>>> App\Post::where('id', '>' , '1')->orderBy('created_at', 'desc')->get()->toArray(); => [ [ "id" => 3, "title" => "title 2", "body" => "body 2", "created_at" => "2019-12-09 15:11:31", "updated_at" => "2019-12-09 15:11:31", ], [ "id" => 2, "title" => "hogehoge", "body" => "body hogehoge", "created_at" => "2019-12-09 15:04:21", "updated_at" => "2019-12-09 15:04:21", ], ] >>> |
SQLのlimit
1 2 3 4 5 6 7 8 9 10 11 |
>>> App\Post::where('id', '>' , '1')->get()->take(1)->toArray(); => [ [ "id" => 2, "title" => "hogehoge", "body" => "body hogehoge", "created_at" => "2019-12-09 15:04:21", "updated_at" => "2019-12-09 15:04:21", ], ] >>> |