コントローラとオブジェクト指向

株式会社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で返されているので、このコントローラを呼び出したプログラムの元には、データベースの情報に基づいて、ユーザーの名前とメールアドレスが返ってきます。

 

基本はこれだけ

たいしたことのない内容ですよね?この「たいしたことなさ」がオブジェクト指向でデータを扱うことの利点です。
このようにしてオブジェクト指向でデータを扱わなくてもユーザー情報を取得する方法はありますが、オブジェクト指向であることで、短く簡潔に、間違いなくパラメータにアクセスしています。

簡単であることは学習が簡単であるメリットだけでなく、コードが見やすくなって後から修正しやすいことも利点で、バグを修正したり新しい機能を拡張する際には非常に助かります。単に初心者に優しいというだけではないんですね。

person using iMac

 

今回の例では話を簡潔にするため、「通し番号が’123’であるユーザーの記録を検索」と、検索でヒットするデータを最初から決めた例を出しました。
しかしコントローラで実際にデータを扱う際はこうはいきません。どんなデータが登録されていて、利用する人間がどんなデータを欲しがるかは実際に使われる瞬間まで分からないからです。

次回、「リクエスト」編に続きます。

WEB制作・ITに関するお悩みや
ご質問等お気軽にご相談ください

contact

この記事の著者

コメントする

関連記事