VSCodeでLaravelのEloquentの補完が効かないことについて
通常のPHPの補完については、「PHP Intelephense」の拡張機能を使えば補完が効く。
ただし、Laravelはファサードを使っているため補完が出ない部分がある。
それはbarryvdh/laravel-ide-helperを使えば大体出るようになる。
しかし、createなどの補完が出ない
Modelのメソッドが出ない理由は内部的にマジックメソッドが使われているから
それでも補完を出す方法はいくつかある
- query()メソッドを使う
- Modelの継承先を
class Post extends \Eloquent
にする - PHPDocsの
@mixin \Eloquent
を有効にする
query()メソッドを使う
一番良さそうな手だと思う
内部的には結果的に同じ処理を通ることになるから副作用については問題ないはず(Laravelの仕様が変わってなければ)
Eloquentの公式Twitterもquery()付けることのプチメリットみたいなこと言ってた気がするからどっち派?みたいなものだと思ってる(ソースはパッと探して出なかった。。。)
Modelの継承先をclass Post extends \Eloquentにする
内部的には\Illuminate\Database\Eloquent\Model
を継承しているから問題ないはずだけど、
詳しく把握しているわけでもないし、その副作用が分からないのでしっかり調べてから使おう
PHPDocsの@mixin \Eloquentを有効にする
ここが一番伝えたかったところ
PHPStorm使っている人は動いているっぽくて困ってた
結論、VSCodeのPHP Intelephenseは@mixin \Eloquent
を検知してないみたい
v1.7.0からサポートしてるけど、プレミアムライセンスの人のみ
PHPStormはmixinが使えるから補完効くんじゃないかなと思ってる
(使ってないので推測だけど。。。)
サポートする意味も含めてお金を出す価値はあるけど、チームで開発するときにライセンス持ってない人がいたら辛いかも
実際に買った訳じゃないから、動くかどうかは未検証
参考
ガッツリ調べたわけじゃないから、推測が多め
だけど、こういう背景がありそうなので、困っている人のヒントになれば嬉しい
何を選択するかはその環境で合意を取って動こう
個人的なオススメはquery()を使うこと
コードが見通しやすくなるとかプチメリットも存在するし、何しろ手軽
ただしCRUD作ったくらいの視点なので、プロジェクトが進んでいくにつれて「やっぱり@mixin認識してくれないと。。。」みたいな場面に遭遇するかもしれないので、何とも言えない
他に方法あれば教えていただけると助かります!