このサービスコンテナのbindメソッドで、TestEchoHelperメソッドのインスタンス化方法を登録します。第1引数のTestEchoってなんだ?と思ったかもしれません。これはサービスコンテナから「俺はTestEchoを使う!」って呼び出したときに、TestEchoHelperクラスのインスタンス化方法が実行されるようにしています。インスタンス化方法の名前を決めてるわけですね。今回は「’TestEcho’っていうインスタンス化方法で、TestEchoHelperクラスはインスタンス化される」という登録をしました。function()...)って書いても大丈夫です。これで「TestEchoHeplerクラスを呼び出す方法をサービスコンテナに登録する」準備が整いました。「インスタンス化方法をサービスコンテナに登録するサービスプロバイダ」をlaravel起動時に呼び出すようにする。呼び出そうとしているのはサービスプロバイダです。「サービスコンテナにインスタンス化方法を登録する処理を書くクラス」です。落ち着いて順番に追っていきましょう。laravelを入れたなら一回は見たことある場所じゃないでしょうか?ここのproviders配列内にクラス名を登録します。今回のAppServiceProviderはもう登録されていますね。ここに登録することで、laravel起動時にAppServiceProviderクラスのregisterメソッドとbootメソッド(あれば)が実行されます。laravel起動時ってリクエスト時だけじゃないの?って思うかもしれませんが、シェルなどの実行時も動きます。ファサードクラスを作るやっとFacadeが出てきました。このFacadeクラスもどこにおいても大丈夫です。今回はapp/Facadesディレクトリを作ってそこに置きます。このFacadeクラスでは何を書くかといえば、getFacadeAccesorメソッドで「サービスコンテナに登録されたインスタンス化方法の名前を返す」ことだけです。書いてもいいんでしょうけど。今回は手順3(覚えてますか?)で、サービスコンテナによるTestEchoHelperクラスのインスタンス化方法を「TestEcho」っていう名前にしたので、TestEchoを返します。別名を決めるやっとここまで来ました。これもconfig/app.phpです。見覚えがあるんじゃないでしょうか?実際に呼び出すことになるのはTestEchoFacadeクラスです。なんといっても窓口ですから。TestEchoFacade::って少し長いですね?なのでTestEcho::で呼び出せるようにします。手順3で「インスタンス化の方法」にもTestEchoと名付けてここでも同じ名前ですが、同じ名前にする必要性はありません。同じにした方がわかりやすい気もします。実際に使うやっと使えます!まずはコントローラーから。配下にあるので、絶対パスで指定しましょう。↑は画像ですが白文字背景+黒文字だけなのでわかりにくくてすみません。viewでも出してみましょう。こんな感じでカスタムヘルパーみたいなのを作れます。builderがかなり高機能で面白いですね。単純なことで時間を食ったので同じことでハマった人がいた時のために。結論はタイトル通りですが。問題はSELECTで関数を使った時です。configured.」みたいなエラーが。何を言ってるんだね?と思ったわけです。仕方ないのでconfig/database.phpを確認。そもそもなんで使ってるDB設定が「mysql1」なの?$connectionに書いてるよね?って思ってたら、DBファサードはデフォルトのDB接続設定使うんだと思い出したわけです。したら、このdatabase.phpのdefaultに「mysql1」ってありますね。「rawメソッドでもconnection設定しなきゃダメなんだ」と気づきました。rawだと文字列操作関数みたいなイメージだから失念してました。completeを効かせるphpstorm使ってますか?phpをメインに開発してるなら今すぐ導入しましょう。有料で年10000円くらいですが、使いやすさを考えると安すぎるくらいです。そんなphpstormでlaravelのプロジェクトを作るときにお手軽にコード補完をする方法。builder周りだけです。「composerとかide-helperとかこわい」って人向けです。Testという名前のEloquentを作ります。test_table;」を実行するというコードを書く。「そんなメソッドないよ」って言われてます。マジックメソッドですからね。__callメソッドで指定しているものまでは補完してくれません。補完してほしいですね。そんなときはModelクラスに直接PHPDocを追加です。補完されるようになりました。「Modelクラスには、\Illuminate\Database\Query\Builderクラスを戻り値として返すselectっていうstaticメソッドありますよ」って教えてあげたからですね。参考までにこのクラスを作り出してるのは下のModelクラス内の__callマジックメソッドです。(正確には、今回はTestクラスのstaticメソッド呼び出し(Test::select)してるので__callStaticが呼ばれて、自分自身のインスタンスのselectメソッドを呼ぶ__callが呼ばれて、newQueryメソッドで\Illuminate\Database\Query\Builderインスタンスが生成され、\Illuminate\Database\Query\Builderクラスのselectメソッドが呼ばれる)これで怖いものなしですね。してjoinの中でも補完したいとお思いかもしれません。