株式会社WOWNエンジニアチームです。
前回は、コントローラファイルの話をしました。
前回の話で行った内容は、とある決まった文字列を返しただけです。
Laravelを扱うのであれば、データベースと連携し、記録の検索や操作ができるようになりたいですよね。
ということで今回はLaravelのコントローラが登録されたデータを扱う方法の話をします。
おさらい:クラスとは?
Laravelがデータベースと連携する際、モデルクラスに基づいてデータを扱います。
以前も解説した内容ではありますが、今一度改めて復習していきましょう。
クラスとはオブジェクト指向における基本概念で、「特定の構造であることを保証されたデータ」のようなものです。
例えばSNSでユーザー登録をした際を想像してみましょう。
ユーザー登録をする際、名前、メールアドレス、生年月日などのデータを入力しますね。こうしたデータはユーザーと完全に紐づいていますから、ユーザーのパラメータ(情報)として、紐付けて保存されます。
ですがユーザーは記事ではありませんから、ユーザーは「記事の内容」などのパラメータを持つことはありません。
このように、どんなデータがどんなパラメータを持つことができるのかを設定するのが「クラス」と呼ばれるデータの役割のひとつで、こうしたクラスの構造に基づいて作成されたデータを「オブジェクト」と呼びます。
なぜクラスを決めてオブジェクトを作成するのかといえば、さまざまな利点がありますが、こうして構造をあらかじめ決めていれば、オブジェクトの持つ情報にアクセスする際、手続きを随分と省略できるからです。
そして、Laravelではデータベースの記録と対応したクラスを作成し、クラスの構造に基づいてデータを探したり操作したりするのです。これがモデルクラスの働きです。
実践
実際に、コントローラからモデルクラスを介して、簡単にデータベースにアクセスしてみましょう。
use App\Models\User;
public function getUserInfo()
{
$user = User::find('123');
return [
$user->name,
$user->email
];
}
ビューページの表示などで何度か例に出した処理です。
1行ずつ内容を追ってみましょう
1:ユーザーオブジェクトを取得
$user = User::find('123');
Laravelが持つクエリビルダという機能の構文で、「データベースのUserテーブルの中から、通し番号が123のレコードを探すよ。見つけたら$userという変数にデータのオブジェクトを格納するよ。」という処理です。
この処理によって、「$user」はオブジェクトを収めた変数になります。このオブジェクトはUserモデルから取得したのでUserクラスのオブジェクトです。
2:オブジェクトのパラメータにアクセス
$user->name
$user->email
オブジェクトを取得できたら、次はオブジェクトを扱います。
オブジェクトに対して「{オブジェクト}->{パラメータ名}」と矢印(アロー演算子)を繋ぐと、オブジェクトの持つパラメータにアクセスすることができます。
$userはユーザークラスのオブジェクトなので、名前やメールアドレスといったパラメータを持っているでしょう。「$user->name」と書けばユーザー名が表示され、「$user->email」と書けばメールアドレスが表示されます。
(持っているはずがないパラメータをアロー演算子で呼ぼうとするとエラーになります。例えば「$user->file_type」などと書くとエラーになります)
これらのパラメータがreturnで返されているので、このコントローラを呼び出したプログラムの元には、データベースの情報に基づいて、ユーザーの名前とメールアドレスが返ってきます。
基本はこれだけ
たいしたことのない内容ですよね?この「たいしたことなさ」がオブジェクト指向でデータを扱うことの利点です。
このようにしてオブジェクト指向でデータを扱わなくてもユーザー情報を取得する方法はありますが、オブジェクト指向であることで、短く簡潔に、間違いなくパラメータにアクセスしています。
簡単であることは学習が簡単であるメリットだけでなく、コードが見やすくなって後から修正しやすいことも利点で、バグを修正したり新しい機能を拡張する際には非常に助かります。単に初心者に優しいというだけではないんですね。
今回の例では話を簡潔にするため、「通し番号が’123’であるユーザーの記録を検索」と、検索でヒットするデータを最初から決めた例を出しました。
しかしコントローラで実際にデータを扱う際はこうはいきません。どんなデータが登録されていて、利用する人間がどんなデータを欲しがるかは実際に使われる瞬間まで分からないからです。
次回、「リクエスト」編に続きます。
WEB制作・ITに関するお悩みや
ご質問等お気軽にご相談ください