Laravel 与 Symfony |模型属性

Posted

技术标签:

【中文标题】Laravel 与 Symfony |模型属性【英文标题】:Laravel vs Symfony | Model Attributes 【发布时间】:2020-04-10 21:23:26 【问题描述】:

我实际上是在发现 Laravel(我已经使用 symfony 多年),但我遇到了一种情况,我不知道我是否只是找不到正确的信息,或者这只是 Laravel 的方式。

在 Symfony 中创建模型时,您将属性放入模型类中。实际上,这些属性代表 ORM 表的不同列。

现在在 Laravel 中,我看到所有人都没有将这些属性放在模型类中,而是放在迁移文件中。因此,应该为新项目做出贡献的新开发人员将不得不查看数据库或迁移文件。在我看来这不是 ORM 的规则:“让开发者思考类而不是表

有人能说明一下这一点吗?

谢谢

【问题讨论】:

虽然这可能是一个有趣的讨论,但这种基于意见的问题对于 Stack Overflow 来说完全是题外话。另一方面,如果开发人员应该思考类,那么为什么要将数据库信息放在类本身呢? 这是由于与 Doctrine 和 Eloquent ORM 的方法不同。 Doctrine 是一个数据映射器 ORM,其中您的属性与 db 中的列匹配,而 Eloquent 是一个 Active Record。在 Eloquent 中,您的字段直接来自数据库。 有些人喜欢在他们的 Eloquent 模型上使用@property docblocks 来显示和输入模型包含的属性的提示 【参考方案1】:

如果您使用 phpStorm(但它也可以与其他 IDE 一起使用),有一个有趣的 composer 包可以为您生成模型文档,以便根据您的迁移自动完成属性广告方法:

https://github.com/barryvdh/laravel-ide-helper

它的三个主要方法:

php artisan ide-helper:generate 为 Facades 创建 phpDoc php artisan ide-helper:model 为您的模型创建 phpDoc(您应该在每次新迁移后重新启动它) php artisan ide-helper:meta 创建 phpstorm 元文件

所以,如果你启动 php artisan ide-helper:model 它会添加类似的东西

/**
 * App\User
 *
 * @property-read \Illuminate\Database\Eloquent\Collection|\Spatie\Permission\Models\Permission[] $permissions
 * @property-read \Illuminate\Database\Eloquent\Collection|\Spatie\Permission\Models\Role[] $roles
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User permission($permissions)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User role($roles, $guard = null)
 * @property int $id
 * @property string $name
 * @property string $email
 * @property \Illuminate\Support\Carbon|null $email_verified_at
 * @property string $password
 * @property string|null $remember_token
 * @property \Illuminate\Support\Carbon|null $created_at
 * @property \Illuminate\Support\Carbon|null $updated_at
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User whereCreatedAt($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User whereEmail($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User whereEmailVerifiedAt($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User whereId($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User whereName($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User wherePassword($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User whereRememberToken($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User whereUpdatedAt($value)
 * [...]
 */

所以你有一个 phpDoc

您的 IDE 应该能够像这样自动完成您的代码:

【讨论】:

以上是关于Laravel 与 Symfony |模型属性的主要内容,如果未能解决你的问题,请参考以下文章

雄辩的模型属性作为骆驼案例 [Laravel 5.2] [Dingo API]

相关模型 eloquent laravel 中的自定义查询

PHP Laravel框架入门心得

Laravel/Eloquent - 创建与可能具有或不具有属性的父模型相关的多个子模型的关系

Laravel 模型关系上的计算字段,如模型属性

Symfony 4.4:为图像文件上传保留的实体/模型属性由表单系统设置更新(结果始终为空 - 没有错误)