Laravelでは、Tinkerを使ってデータベース上のテーブルを編集できます。これまでの記事では、データベースに直接入力を行ってテストをしてきました。
それでも良いのですが、Tinkerを使うことで、より便利にデータの追加や修正ができます。
いくつかコマンドを紹介します。
英語の豆知識
tinker(ティンカー)は英語で鋳掛け屋(金物の修理屋)、修繕屋、といった意味。実はあのピーターパンにでてくるティンカーベルの職業もティンカーです。
Tinkerの使い方
最初に次のコマンドを入力します。
1 |
php artisan tinker |
ここから先は、tinkerコマンドワールドになります。
データを追加する(カラム1個)
すでにデータベースにdivisionsテーブルがあるとします。
divisionsテーブルには、入力するカラムが1か所だけだとします。そこにTinkerを使って、新たにデータを追加してみます。
次のように入力します。
1 |
$division=new App\Models\Division |
divisionテーブルのnameカラムに”human resources”というデータを追加するには、次のように入力します。
1 |
$division->name='human resources' |
trueという値が返ってきます。最後にsaveします。
1 |
$division->save() |
trueという値が返ってきます。
データベースを確認すると、次のようにデータが挿入されています。
ふたつ目のデータを入力するときには、また $division=new App\Models\Division から繰り返します。
データを追加する(複数カラム)
入力するカラムが2か所あるaddressテーブルに、新たにデータを追加するとします。
次のように入力します。
1 |
$address=new App\Models\Address |
ここから先は、addressテーブルの各カラムにデータを追加していきます。
addressテーブルのaddressカラムに”naushika village”というデータを追加するには、次のように入力します。
1 |
$address->address="naushika village" |
値が返ってきます。
次にaddressテーブルのplayer_idカラムに”1″というデータを追加します。
1 |
$address->player_id="1" |
値が返ってきます。
カラムをすべて入力し終えたら、最後に $address と変数を入力します。
入力中の項目が表示されます。最後にsaveします。
1 |
$address->save() |
trueという値が返ってきます。
コマンド上では、次のように表示されています。
データベースにも、次のように追加したデータが挿入されています。(2行目)
データを検索する
divisionテーブルにいない状態でdivisionテーブル1番の内容を表示するには、App\Models\Divisionを付けて検索します。
1 |
$division=App\Models\Division::find(1); |
次のように結果が返ってきます
リレーションがあるデータを検索する
Tinkerを使えば、リレーション先の値が取得できるかのテストも行えます。
たとえばユーザーテーブルとアドレステーブルの間でhasOneのリレーションが設定してあるとします。
この状態で、リレーションのチェックをしてみましょう。
まずは、Tinkerで下記を入力し、ユーザーid2番のユーザーを検索します。
1 |
$user=App\User::find(2) |
このユーザーidに紐づいたAddressテーブル上のアドレスを取り出します。
Tinkerで下記を入力します。
1 |
$user->address |
これまでデータベースに入力してある内容に基づいて、結果が返ってきます。
データを更新する
Tinkerによって、データを更新することもできます。
たとえば、divisionテーブル1番のデータの【name】カラムを “human resources”から “HR”に変更したいとします。
まずはデータを検索して、更新したいデータを取ってきます。
1 |
$division=App\Models\Division::find(1); |
次に更新したい内容を入力します。
1 |
$division->name="HR"; |
更新後の値、”HR”が返ってきます。
保存します。
1 |
$division->save() |
データベース上でも変更が確認できます。
データを削除する
最後は、Tinkerによるデータベース削除方法を紹介します。
たとえば、divisionテーブル1番のデータを 削除します。
まずはデータを検索して、更新したいデータを取ってきます。
1 |
$division=App\Models\Division::find(1); |
データが表示されます。
次に削除のコマンドを入力します。
1 |
$division->delete() |
無事削除できた場合は、trueの値が返ってきます。
Tinkerをやめるには
tinkerをやめるには quitと命令を打ちます。
1 |
quit |
元通り、laravelのコマンドを入力できるようになります。
さいごに
以上、Tinkerの使ってデータベースを操作する方法を解説しました。
データベースを開かなくても、データベース上の値を操作したり、テストできるのが良い点かとお澪ます。
ご紹介したとおりTinkerで値の追加もできますが、ただ、大量にテスト用データをいれる時には、ちょっと不便。
この場合には、LaravelにはFakerという超便利機能があります。こちらは、また別の記事で紹介していきますね。