モデルの使い方

MVCの概念では、モデルはビジネスロジックを書く場所とされる。

Laravelにおけるモデルの配置

Laravelにおいて、モデルの定義は割とあいまいなようである。
つまり、厳格には定まっておらず、
単に「Illuminate\Database\Eloquent\Model」の
「Model」クラスを継承したクラスであればよい。

実際に「Artisan」で生成されるモデルも、
単純に「Illuminate\Database\Eloquent\Model」を継承されたクラスが存在するだけである。
「$php artisan make:model test」実行例・・・

?<php

namespace App;

use Illuminate\Database\Eloquent\Model;

class test extends Model
{
    //
}

コマンドラインを使用するほうが、めんどくさいという場合、
上記をコピーして改造してもよい。

テーブルへの接続

モデルは、クラス名を複数形のスネークケースにした
テーブル名のテーブルを、自動で指定する。

たとえばクラス名が「TestUser」の場合、
「test_users」テーブルを自動的に参照する。

しかし、任意のテーブル名を指定したい場合、
以下のようにクラス変数「$table」をオーバーライド代入するとよい。

protected $table = 'hoge_hoge';

文字列で、テーブル名を指定する。
ちなみにこの方法で、任意にテーブル名を指定する場合は、
テーブル名は複数形でなくてもよい。

複数形にする理由は、要はわかりやすくするためでもあり、
テーブルに収まるデータが、複数存在するものだからだろう。

モデルの詳細設定

モデルがデータベースに対して行う、基本的な設定を上書きする事も可能である。
設定には、特定のクラス変数をオーバーライドすればよい。

レコード追加日時と更新日時を保存しない場合

public $timestamps = false;

「$timestamps」に「false」を代入する。
なお、この設定を行わず、日時入力を有効にする場合、
「created_at」「updated_at」カラムを作成しておく必要がある。

レコード追加日時と更新日時を保存するカラム名を指定したい場合

const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';

クラス定数として代入する。

別のデータベースに接続
protected $connection = 'connection-name';
「/config/database.php」に登録したデータベース情報を基に、
データベース名を指定して接続できる。

ちなみに、モデル内にパスワードなどを記載するのは危険なので、
モデル内に記載するのは、「/config/database.php」で登録した、
データベースの接続名という事になる。
データベース設定方法は、こちらを参照。

更新を許可するカラム

protected $fillable = [
    'name', 'email', 'password',
];

「$fillable」に、更新してもよいカラムを定義する。
中身は配列で、対象のカラム名を文字列で代入していく。
これとは逆の機能を持つ「$guarded」も存在し、記述は同じだが、
こちらは逆に、更新してはいけないカラム名を指定する。
「$fillable」と「$guarded」は、どちらか片方しか設定できない。

なお、自動インクリメントを行う主キーや、
「created_at」「updated_at」といった自動挿入のカラムについては、
記入する必要はない。

JSON出力した際などに、隠しておくカラム

protected $hidden = [
    'password', 'remember_token',
];

未検証のため、よくわかんない。
とりあえず、隠したいとこだけ設定しておけばいいかも。

モデルの呼び出し

MVCの原則からすると、
モデルはコントローラーだけでなく、ビューから呼び出す事もよいとされる。

呼び出し方は、要は普通にファイル参照して、クラスやメソッドを呼び出す形である。
たとえば「TestData」というモデルに「getData」というメソッドを作ったなら、
「App\TestData::getData()」で、呼び出す事ができる。

また、継承元でもある「Eloquent」の「Model」クラスには、
いくつかのメソッドが存在する。
そのひとつが「find()」であり、引数には取得したいレコードの
主キーを入力すると、レコードの中身を取得できる。

使用例としては、以下のとおりである。

$data = App\TestData::find(1);

1レコード目ではなく、主キーが「1」のレコードを取得するという点は注意。

次に、アロー演算子とカラム名で、取得したい値を取り出せる。

echo $data->family_name

モデル内で使用する場合には、「self」を使用するとよい。

$data self::find(1);
return $data->family_name;