概要
Laravel のモデルでクエリを組み立てようとすると、 Method 'where' not found
と言われてしまう。
このせいで PHPStorm の補完が効かなかったり、警告が出てしまったりする。
<?php // where のとこで警告が出る(動作は問題ない) MyModel::where('name', $name)->first(); // query() をかませると平気なんだけれども、面倒 MyModel::query()->where('name', $name)->firstOrFail();
laravel-ide-helper を導入する
laravel-ide-helper
で解決できそうなので導入してみる。
IDE補完用のコードを生成してくれるようだ。
README に従って入れてくだけ。
sail composer require --dev barryvdh/laravel-ide-helper
モデル以外にも役立ちそうなので、全部入れてみる。
sail php artisan ide-helper:generate sail php artisan ide-helper:models sail php artisan ide-helper:meta
直接プロダクトコードを上書きする方法と、別ファイルに切り出す方式が選べる。
あくまでヘルパーなので、別ファイルにしてみる。
Do you want to overwrite the existing model files? Choose no to write to _ide_helper_models.php instead (yes/no) [no]: > no
方針次第だと思うけど、対象のファイルを .gitignore
に入れておくとよさそう。
別の警告が。。
無事補完はできるようになったのだが、別の警告が出るようになってしまった。
ファイルを別にする方式の弊害っぽいが、 Multiple definitions exist for class ..
と言われてしまう。
色々調べてみたけれども、対象の警告をオフることにした。(しかし敗北感が。。)