2018.11.12
団体用集金システムを作りたい!#10【EloquentORM#1-基本のキ-】
ということで、今回から導入してみようとおもいます
EloquentORM、Laravelのもつオブジェクト関係マッピングのフレームワークです。
今まではクエリビルダーを使って書いてたんですけど、もう少しいい感じにかけると嬉しいところもあるので、ちょっと手を出してみようと思いましてね。
とりあえず
ドキュメントを読みながら環境構築していきましょうかね・・・・・・。
とりあえず一番素直そうなUserモデルから作ってみましょーかね。
あっハイ・・・・・・なるほど()
じゃあこの機会に、Userモデルの中身を見てみましょうか。
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
へーーえなるほどマン。
このように、データベースのカラムを分類していくのが基本スタイルっぽいですね。
ここで、fillableとはなんやねん?って話ですけど、ドキュメントによると
複数代入してもよいカラムのことを指すそうで。まぁ要すると、不用意に弄られてもそんなに困らないカラムっていう認識でよいでしょうか。
これはデフォルトのままいじってないのですが、パスワードとかはこっちでは管理しないので消しちゃってもよさそーですね。あ、hiddenってのはドキュメントに載ってないんですけど、どうやら
モデルを配列/JSON変換するときに隠蔽されるカラムって意味らしいっすよ。
まずはinsertをどんなふうにするのか見てみないとですね。
だってさ。(笑)
ってか、これモデルのフィールド、privateじゃないんすね(笑)ちょっと驚きである・・・・・・。
クエリビルダでinsertするのに比べると、まぁやってることは変わらないのですがちょっと書き方がスッキリしますね。
public function setUser(User $u):UserDAO{
$this->user = $u;
return $this;
}
public function upsert():User{
$this->user->save();
return $this->user;
}
僕がいま使ってるのはこんなかんじの使い方してます。
ユーザークラスをそのままぶっこめばいい感じですね。setUserが必要かどうかはわかりませんが、フィールドとしてユーザークラスを持っておいた方が操作しやすいかな?と思いまして・・・・・・。
Eloquentを用いるメリットとしては、このようにupsertがすごく簡単に定義できることがまず挙げられますね。
このsaveという関数、insertにもupdateにも使えるんですよね。ORMの利点を活用している形になりますね。これでなんも考えずにこれを呼び出せば適切な処理がされるはずです。まだupdateするようなページ作ってないんでわかんないですけど(笑)
public function loginWithToken(string $cryptedEmail,string $secret_token){
$user=(new UserDAO())->getUserwEmailAndToken($cryptedEmail, $secret_token);
if(empty($user)){
//ユーザーが見つからない
return view("login.LoginTokenError");
}
//ユーザーが見つかったのでログイン
Auth::login($user, true);
return view("index.index");
}
他の利点としては、インスタンスをぶっこむことでログインできたりするよーになるところですかね。
とりあえず、全体的に使い勝手がよくなってる感じはしますね〜。
とりあえず、現段階までここまでできました。
画面で見るとしょっぼいですけどね(笑)