Laravel 5.2 Auth::user() に他テーブルのJOINしたデータを追加する。

先の記事で、標準の認証機能を使用したが、認証情報に他テーブルのデータも保持しおきたいと思い、調べてみましたがちょっとやり方が違うのか手こずりました。

クライアント環境:Windows10 XAMPP(PHP7.0.4) Eclipse 4.5.2(Mars) Laravel5.2.39

サーバ環境:CentOS7 MariaDB5.5.47

公式(https://laravel.com/

調べてみる!

Google先生に「laravel5 auth user join」で聞いてみた。

http://ja.stackoverflow.com/questions/11271/laravel-5-の-authuser-のプロパティにjoinしたデータを追加したい

おぉ!stackoverflow先生まで日本語版が出てきたのね。と思いながらそのままやってみる。
ダメだった!まぁそんなもんです。日本語版が無いときもそんなもんです。いい線は行くのは間違いないので、stackoverflow先生も必要なんですよ。そのものズバリってのは面白く無い!(工数の問題はともかくとして…)

結果

私の愚痴なんてどうでもいいので、結果はこんな感じ。

まずは、認証クラスをオーバーライドして発行されるSQLを変更するために、プロバイダを作る。

そのユーザの所属している法人名と店舗名をJOINした結果を取得する感じですね。

次、上記のクラスを認証ドライバとして追加します。

register()メソッドは無いので追加してあげます。
モデルの取得があれでいいのかはだいぶ微妙な書き方だなと。もうちょっと良いやり方があれば教えてください。

次、’auth_ex’を定義してあげないといけません。

以上、これで「Auth::user()->shop_name」ってやると店舗名が取得できたりします。