Красноречивый код ORM, указывающий в PhpStorm

Поэтому я только начинаю с Laravel (используя v5) и Eloquent. Я работаю над запуском некоторых основных API-интерфейсов и замечаю, что многие методы работы не отображаются в подсказке кода PhpStorm

Итак, у меня есть эта модель:

namespace Project\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; class User extends Model implements AuthenticatableContract, CanResetPasswordContract { } 

И в одном из моих контроллеров я стараюсь

 User::query()->orderBy('id', 'desc'); 

User::query() создает объект Eloquent Builder и orderBy() ведет себя корректно и без ошибок. Тем не менее, PhpStorm не показывает orderBy() (или take() , skip() , и я уверен, что другие) при orderBy() User::query()-> и дает предупреждения, когда я действительно его использую.

Я использую Laravel IDE Helper, который очень помог принести подсказки кода к фасадам, но не к моделям / строителям.

У кого-нибудь есть решение?

Для будущих гуглеров и, возможно, OP, если вы все еще придерживаетесь Laravel.

Пакет laravel-ide-helper решает эту проблему для вас довольно элегантно, и я считаю, что это относительно новая функция; созданная модель PHPDocs.

Вы можете создать отдельный файл для всех PHPDocs с помощью этой команды:

 php artisan ide-helper:models 

Сгенерированные метаданные будут выглядеть примерно так для каждого класса:

 namespace App { /** * App\Post * * @property integer $id * @property integer $author_id * @property string $title * @property string $text * @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $updated_at * @property-read \User $author * @property-read \Illuminate\Database\Eloquent\Collection|\Comment[] $comments */ class Post {} } 

Это вызвало проблемы для меня в PHPStorm, однако, когда программное обеспечение жаловалось на несколько определений классов. К счастью, опция доступна для непосредственного написания файлов модели:

 php artisan ide-helper:models -W 

Есть еще несколько параметров и настроек, если вам нужно настроить поведение, но это его суть.

Вы можете попробовать подключить плагин Laravel для PhpStorm, и вам нужно специально активировать его в настройках вашего проекта.

Немного поздно, но у меня недавно была такая же проблема, поэтому я подумал, что хочу записать заметку:

Это связано с тем, что Database\Eloquent\Model.php имеет функцию query() которая возвращает \Illuminate\Database\Eloquent\Builder а Eloquent\Builder имеет строку:

 use Illuminate\Database\Query\Builder as QueryBuilder; 

Затем он использует методы «magic» __call для вызова функций в Query\Builder . (ищите метод __call в Eloquent\Builder )

См. http://php.net/manual/en/language.oop5.overloading.php#object.call

__call () запускается при вызове недоступных методов в контексте объекта.

Таким образом, действительно, метод, который вы вызываете, недоступен 🙂 Существует не так много, что может сделать IDE.

Есть обходные пути, такие как использование тегов @method, но это недопустимо. Альтернативой является использование @mixin (но это не стандарт). См. https://github.com/laravel/framework/issues/7558

Я думаю, что все это будет разрешено, когда они избавятся от всех магических вызовов в коде Laravel и вместо этого используют «черты» PHP. Посмотреть последнее сообщение здесь. 🙂