PHP

【Laravel】tinkerを使いMySQLのテーブルを操作する

2018年6月15日

この記事は、Laravel 入門者向けの ひとこと掲示板シリーズの記事になります。

 

 

前回は、DB とテーブルを作り、tinker を使ってカラム毎にデータを入れる事をやってみました。

(下のリンクが前回のその記事になります。)

今回も tinker を使いますが、tinker でデータを操作する方法について簡単にまとめてみました。

この操作が理解できると、データの追加や参照などがより効率的にできるようになります。

 

 

 

 

 

環境

 

 

以下の環境を使っています。

 

  • Cloud 9
  • PHP 7.0
  • Laravel 5.5.40
  • MySQL 5.5

 

テーブル構造ですが、前回の続きなので以下のデータが入っています。

 

 

 

 

手順

 

 

tinker を使えるようにする

 

 

 

 

ちなみに artisan って日本語で何の意味か知っていますか?

「職人」という意味です。craftsman と同じ意味なんでしょうかね。

また、tinker とは、「下手な修理をする」という意味なんですが、他にも「いじくり回す」という意味もあります。

 

 

 

 

ですので laravel 入門者の私としては、php artisan tinker というコマンドを以下のように覚えてます。(笑)

なかなか面白いですね。

 

 

php artisan tinker は

「php が職人を召喚していじくり回す」

と覚えましょう!

 

 

 

ID を指定してデータを抽出する

 

 

DB に入っているデータを抽出したい場合は、以下のコマンドを使います。

説明としては、App\Post::find で () の中は ID 番号を指定します。をれを配列に変換したいので ->toArray() を使います。

ここでは、ID が 2 番目のデータを抽出しています。

 

 

 

ちなみに、実行結果が以下のようなメッセージが返ってきたら、MySQL のサービスが開始されていない可能性が高いかと思われます。

 

 

 

その場合は MySQL のサービスを起動しましょう。

 

 

 

ここでもう一度、職人さん呼んでいじくり回します。今度はデータの抽出ができました。

私はここで結構ハマっていたので、必ず書かねばと思い書きました!

Cloud 9 を使う場合、私はサーバー側のほうをあまり気にしていないので、「MySQL がいつも動いているんじゃないか」と勘違いしてしまうんです。

ですので、こういった問題が発生するとかなり焦りますね。(汗)

 

 

 

 

特定の ID より大きいデータを抽出する

 

 

さて、簡単にデータを抽出する事ができるようになりましたので、今度は部分的にデータを取ってみます。

方法は色々あるかもしれませんが、私が覚えたのは where メソッドなので、これを使います。

説明としては、where メソッドで id が 1 より大きい条件に当てはまったデータを、get メソッドで取得して、最後に配列に変換します。

 

 

 

複数のカラムにデータを追加する(一気に追加したい)

 

 

前回は、カラム毎にデータを追加しましたが、さすがに面倒なので、レコード単位で一気に追加したいと思います。

レコードの追加方法としては、2 種類あります。

おさらいですが、これは前回の方法で、モデルのプロパティに値を代入してから、save メソッドを実行するパターンです。

 

 

 

今回は、createメソッドに連想配列を渡すことをレコードを追加します。

 

 

 

それでは早速実行してみると、あれ?何かわからないメッセージが出てきました。

 

 

 

これは MassAssigmentException というセキュリティーの攻撃を受けない設定を、Laravel ではデフォルトで設定してある為になります。

(悪意のあるユーザーが、本来設定できないカラムの値を設定する攻撃になります。)

 

 

例えば、users テーブルに role というカラムがあったとします。

そこで、 <input type="hidden" name="role" value="admin"> という入力値をそのまま使って、ユーザーを作成した場合に role に admin が書き込まれてしまうとまずいですよね。

書き込まれずに無視するには、MassAssigmentException 対策が必要になります。

この MassAssignment 対策に対して、モデルにあるファイルに以下の画像のように書いてあげる必要があります。

 

 

 

 

 

MassAssignment 対策で忘れそうになりましたが、データの追加をもう一度試してみましょう。

今回は、問題なくデータの追加ができました。

 

 

 

ついでにもう一つデータを追加します。

 

 

 

 

抽出したデータを並びかえる

 

 

抽出したテーブルの特定のカラムを orderby 句で並び替えます。

orderby 句で取れたデータを、get メソッドで取得して、最後に配列に変換します。

 

 

 

 

抽出したデータから件数を指定する

 

 

抽出したテーブルの特定のカラムを take メソッドで 指定した件数を表示します。

where メソッドで取れた id が 1 より大きいデータを、take メソッドで 1件取得して、最後に配列に変換します。

 

 

 

以上になります。いかがでしょうか。

私はデータの操作って SQL で直接書くものだとまだ頭の中にありますが、こうやってデータの操作が非常に短い文で書けると便利ですね。

早くなれるようにしたいです。

 

 

 

では最後までお読みいただきありがとうございました!

 

 

以下の記事をクリックして次に進みましょう!

 

 

 

おすすめの本はこちら ↓↓↓

 

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴3年。PVは月15万PV程度。
趣味はボクシング、筋トレ、登山です。
穏やかで人見知りな性格です。

人気記事

1

こんにちは!そーまんです。 今回は、PC に適用されている GPO を確認する方法について書きました。 本題に入る前に、一応参考までにGPOの適用タイミングについての記事をここに貼りましたので、必要に ...

2

こんにちは!そーまんです。 今回は sysprep について、全体的に PC をセットアップする観点から書いてみました。長々と書いてあります。まずは前置きからです。 まずはじめに 組織では PC のラ ...

3

こんにちは!そーまんです。 今回は、グループポリシー (GPO) を使って、特定のコンピューターに対して、ドメインユーザーに ローカル管理者権限 (以下は特権と記載) を付与する方法について書きました ...

4

こんにちは!そーまんです。 今回は、Windows サインイン後に一時ユーザープロファイルが読み込まれてしまった場合の解決方法について書きました。 Windows 10 の検証環境をいじってたらサイン ...

5

こんにちは!そーまんです。 今回は、ユーザープロファイルを削除する方法について書いてみました。 企業の場合よくあることですが、1 台の PC を共有 PC として複数人で使ったり、また余り無いかもしれ ...

6

こんにちは!SE ブログの相馬です。       今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことが ...

7

コマンドを使って CPU とメモリの使用率をデータで取得してみましたので、例えば PC のトラブルシューティングで問題を再現させる際にデータを取得しておくと、原因の特定に役立つ場合があるかと思います。

8

既存の PC と同じ構成で別のメーカーの PC でマスターイメージを作る際、インストールされているアプリを同一にする為に必要になるかと思います。

9

企業で多くの GPO が適用されている環境では、PC に GPO が適用されなかったりする問題が発生する場合があるかと思います。その中でも、コンピューターの構成またはユーザーの構成のどちらかで、...

10

こんにちは!そーまんです。 今回は、Windows Server 2019 で NTP サーバーと同期する方法について書きました。 NTP サーバーの必要性や時刻同期の重要性を理解することは社内のシス ...

-PHP
-,