PhpStorm 中雄辩的 ORM 代码提示

2022-08-30 13:13:12

所以我刚开始使用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()创建一个雄辩的对象,并正确无误地行为。但是,PhpStorm在我键入时不会显示(或,,我相信其他人),并在我实际使用它时发出警告。BuilderorderBy()orderBy()take()skip()User::query()->

我正在使用Laravel IDE帮助器,它极大地帮助了将代码提示引入外观,但对模型/构建器似乎没有帮助。

有人有解决这个问题的方法吗?


答案 1

对于未来的Google员工,如果你仍然坚持使用Laravel,也许还有OP。

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

如果您需要调整行为,还有一些可用的选项和设置,但这是它的要点。


答案 2

添加模型 PHPDoc@mixin

/**
 * Class News
 * @property int $id
 * @property string $created_at
 * @property string $updated_at
 * @mixin \Eloquent
 * @package App
 */
class News extends Model
{

}

PHPStorm 中工作


推荐