gpt4 book ai didi

php - 如何停止尝试为已映射到实体的 View 创建表的学说?

转载 作者:可可西里 更新时间:2023-11-01 12:58:25 25 4
gpt4 key购买 nike

如何阻止 symfony 尝试为我在原则迁移中创建的 View 创建表?

实体映射 View

/**
* Class TenancyPendingInspection
* @ORM\Entity(repositoryClass="DJABundle\PropertyVisit\Repository\TenancyPendingInspectionRepository", readOnly=true)
* @ORM\Table(name="view_tenancies_pending_inspections")
*/
class TenancyPendingInspection
{

我还有学说迁移文件。

学说配置

doctrine:
dbal:
default_connection: default
connections:
default:
[...]
charset: UTF8
server_version: 5.6
schema_filter: ~^(?!view_)~

文档模式验证

php app/console doc:sch:val
[Mapping] OK - The mapping files are correct.
[Database] FAIL - The database schema is not in sync with the current mapping file.

条令模式更新

php app/console doc:sch:update --dump-sql
CREATE TABLE view_tenancies_pending_inspections ...

最佳答案

简短的回答:这是不可能的。

发生这种情况是因为 MysqlPlatform 忽略了 View 。

//vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php

class MySqlPlatform extends AbstractPlatform
[...]
public function getListTablesSQL()
{
return "SHOW FULL TABLES WHERE Table_type = 'BASE TABLE'";
}
[...]

解决方案:新建一个不忽略 View 的MysqlPlatform:

class MysqlViewsPlatform extends \Doctrine\DBAL\Platforms\MySqlPlatform
{
public function getListTablesSQL()
{
return "SHOW FULL TABLES";
}
}

使用您的平台创建服务:

services:
doctrine.dbal.mysql_views_platform:
class: albertsola\DoctrineViews\MysqlViewsPlatform
arguments: []

通过您的连接使用该平台:

doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
host: "database_host%"
port: "database_port%"
dbname: "database_name%"
user: "database_user%"
password: "database_password%"
charset: UTF8
platform_service: "doctrine.dbal.mysql_views_platform"

应用程序/控制台学说:架构:验证此命令验证实体和 View 实体是否同步。

副作用:应用程序/控制台学说:架构:更新--转储-sql如果 View 和实体不同步,这将生成不应执行的 SQL!您必须手动更新您对数据库的看法。

我使用学说迁移来解决这个问题。尽管 doctrine:schema:update --dump-sql 对于检查 View /实体中不匹配的内容非常有用。

注意:这个 hack 停止创建表,但 doctrine schema diff 仍然尝试更新添加外键的“表”。

关于php - 如何停止尝试为已映射到实体的 View 创建表的学说?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47477324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com