laravel 5.1~ phpstormでクエリービルダーのauto completeを効かせる

phpstorm使ってますか?

phpをメインに開発してるなら今すぐ導入しましょう。

有料で年10000円くらいですが、使いやすさを考えると安すぎるくらいです。

 

そんなphpstormでlaravelのプロジェクトを作るときにお手軽にコード補完をする方法。

お手軽なのでモデル(Eloquent)周りの、さらにquery builder周りだけです。

「composerとかide-helperとかこわい」って人向けです。

 

まずはTestという名前のEloquentを作ります。使用テーブルはtest_table.

そしてTestControllerから「SELECT column1 FROM test_table;」を実行するというコードを書く。

 

WS000174

 

 

 

 

WS000173

 

「そんなメソッドないよ」って言われてます。マジックメソッドですからね。

__callメソッドで指定しているものまでは補完してくれません。でも補完してほしいですね。

 

そんなときはModelクラスに直接PHPDocを追加です。

WS000177

WS000176

 

ちゃんと補完されるようになりました。

「Modelクラスには、\Illuminate\Database\Query\Builderクラスを戻り値として返すselectっていうstaticメソッドありますよ」

って教えてあげたからですね。

参考までにこのクラスを作り出してるのは下のModelクラス内の__callマジックメソッドです。

(正確には、今回はTestクラスのstaticメソッド呼び出し(Test::select)してるので

  1. __callStaticが呼ばれて、自分自身のインスタンスのselectメソッドを呼ぶ
  2. __callが呼ばれて、newQueryメソッドで\Illuminate\Database\Query\Builderインスタンスが生成され、\Illuminate\Database\Query\Builderクラスのselectメソッドが呼ばれる

)

WS000178

 

これで怖いものなしですね。

もしかしてjoinの中でも補完したいとお思いかもしれません。

WS000179

 

そんな時も大丈夫。この$joinは何かといえば、\Illuminate\Database\Query\JoinClause クラスです。

WS000181

 

なので、関数内に…

WS000182

 

やりました。

なんだか長いんだよなーって気になる方にはこちら。

use Illuminate\Database\Query\JoinClause;をコントローラに追加して…

WS000183

スッキリしました。

これまた参考ですが、\Illuminate\Database\Query\JoinClosure クラスを返しているのはこちら。

 

WS000180

 

\Illuminate\Database\Query\Builderクラスのjoinメソッド内で、最初のif文の中でnewされてますね。

これがcall_user_func($one, $join);の2つめの引数として渡され、function($join)の引数になるわけです。

 

これでお手軽にコード補完ができました。