phpstorm使ってますか?
phpをメインに開発してるなら今すぐ導入しましょう。
有料で年10000円くらいですが、使いやすさを考えると安すぎるくらいです。
そんなphpstormでlaravelのプロジェクトを作るときにお手軽にコード補完をする方法。
お手軽なのでモデル(Eloquent)周りの、さらにquery builder周りだけです。
「composerとかide-helperとかこわい」って人向けです。
まずはTestという名前のEloquentを作ります。使用テーブルはtest_table.
そしてTestControllerから「SELECT column1 FROM 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の中でも補完したいとお思いかもしれません。
そんな時も大丈夫。この$joinは何かといえば、\Illuminate\Database\Query\JoinClause クラスです。
なので、関数内に…
やりました。
なんだか長いんだよなーって気になる方にはこちら。
use Illuminate\Database\Query\JoinClause;をコントローラに追加して…
スッキリしました。
これまた参考ですが、\Illuminate\Database\Query\JoinClosure クラスを返しているのはこちら。
\Illuminate\Database\Query\Builderクラスのjoinメソッド内で、最初のif文の中でnewされてますね。
これがcall_user_func($one, $join);の2つめの引数として渡され、function($join)の引数になるわけです。
これでお手軽にコード補完ができました。