NBo*_*roy 1 php doctrine symfony symfony4 symfony5
当我在项目中执行命令行时,我尝试忽略两个实体,doctrine:schema:update --force其写法如下:
/**
* @ORM\Entity(readOnly=true)
* @ORM\Table(name="view_tableau_de_bord")
*/
class ViewTableauDeBord
{
//...
}
Run Code Online (Sandbox Code Playgroud)
在我的doctrine.yaml配置文件中:
doctrine:
dbal:
default_connection: default
connections:
default:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_pgsql'
server_version: '12'
charset: utf8
schema_filter: ~^(?!view_)~
# ...
Run Code Online (Sandbox Code Playgroud)
当我的观点在 .Doctrine 中时,Doctrine 不断生成所有实体schema_filter。你对此有何解释?这是我第一次在项目中使用这个选项。
项目配置:
schema_filter不是为了“过滤”实体,而是为了从学说意识中过滤数据库表。
下面是一个示例:
假设您手动创建一个从名为 的自定义原始 php cronjob 更新的表view_booking_by_customer_per_year,该表不会被项目中的代码使用,而是用于数据分析。
这是一个典型的示例,您不希望每次更新模式时都生成这样的查询。
DROP TABLE view_booking_by_customer_per_year; // NO I DONT WANT THIS
Run Code Online (Sandbox Code Playgroud)
因此,使用schema_filter您可以告诉主义在其验证和更新过程中忽略此表。
尝试使用原始 sql 创建随机表并使用doctrine:schema:validate. 它会显示database is not in sync错误。一旦将其放入 schema_filter 中,错误就不会再发生。
它适用于doctrine:migration:diff和doctrine:schema:update
但是,如果您想避免在数据库内生成实体,则可以从 Ernesto 的答案中的链接中找到以下内容:
schema_ignore_classes:
- Reference\To\My\Class
- Reference\To\My\OtherClass
Run Code Online (Sandbox Code Playgroud)
仅自 Doctrine 2.7 版本起有效。您可以在此处找到完整的示例:Ignore a Doctrine2 Entity when running schema-manager update
我强烈建议您使用doctrine:migration:diffthendoctrine:migration:migrate而不是doctrine:schema:update对数据库执行更改。对于本地开发来说这是可以的,但是在生产中这是一个非常糟糕的做法。
https://symfony.com/bundles/DoctrineMigrationsBundle/current/index.html
| 归档时间: |
|
| 查看次数: |
1392 次 |
| 最近记录: |