postgresql - 使用 PostgreSQL : "SQLSTATE[42P01]: Undefined table: 7 ERROR: the relation does not exist" 的 Doctrine2 ManyToMany 关系

标签 postgresql symfony doctrine-orm

当我在两个实体(通过 ManyToMany 关系连接)之间进行 INNER JOIN 时,学说说无法找到关系machine_table_for_base_model:SQLSTATE[42P01]:未定义表:7 错误:关系“machine_table_for_base_model”不存在。为什么会这样?

我有一个 associative table定义如下:

 <!-- language: lang-sql -->

CREATE TABLE machine_table_for_base_model ( 
    id_machine_table integer NOT NULL, 
    id_base_model integer NOT NULL, 
); 

 ALTER TABLE ONLY machine_table_for_base_model 
     ADD CONSTRAINT machine_table_for_base_model_pkey PRIMARY KEY (id_machine_table, id_base_model); 

 ALTER TABLE ONLY machine_table_for_base_model 
     ADD CONSTRAINT machine_table_for_base_model_ibfk_1 FOREIGN KEY (id_machine_table) REFERENCES machine_table(id) ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED; 

 ALTER TABLE ONLY machine_table_for_base_model 
     ADD CONSTRAINT machine_table_for_base_model_ibfk_2 FOREIGN KEY (id_base_model) REFERENCES base_model(id) ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED;

当我执行关联表的原则映射时,我有类似的东西:

Package\MyBundle\Entity\MachineTable:
    type: entity
    schema: techguide
    table: machine_table
    indexes:
        IDX_8386B61E3C5569AA:
            columns:
                - edit_user
    id:
        id:
            type: integer
            nullable: false
            options:
                unsigned: false
            id: true
            generator:
                strategy: SEQUENCE
    fields:
        description:
            type: string
            nullable: false
            length: 200
            options:
                fixed: false
        labelsDimensions:
            type: text
            nullable: false
            length: null
            options:
                fixed: false
            column: labels_dimensions
        editDate:
            type: datetime
            nullable: false
            options:
                default: now
            column: edit_date
    manyToOne:
        editUser:
            targetEntity: Package\SupportBundle\Entity\Account
            cascade: {  }
            fetch: LAZY
            mappedBy: null
            inversedBy: null
            joinColumns:
                edit_user:
                    referencedColumnName: id
            orphanRemoval: false
    manyToMany:
        idBaseModel:
            targetEntity: BaseModel
            cascade: {  }
            fetch: LAZY
            mappedBy: null
            inversedBy: idMachineTable
            joinTable:
                name: machine_table_for_base_model
                joinColumns:
                    -
                        name: id_machine_table
                        referencedColumnName: id
                inverseJoinColumns:
                    -
                        name: id_base_model
                        referencedColumnName: id
            orderBy: null
    lifecycleCallbacks: {  }

最佳答案

最后我找到了解决这个问题的方法。您需要编辑(手动)ORM 配置中的 joinTable 名称,在我的例子中是一个 Yaml 文件,添加关联表所属的 Postgres 模式:

Entity.orm.yml

manyToMany:
    idBaseModel:
        targetEntity: BaseModel
        cascade: {  }
        fetch: LAZY
        mappedBy: null
        inversedBy: idMachineTable
        joinTable:
            name: <NAME_OF_YOUR_SCHEMA>.<NAME_OF_THE_TABLE>
            joinColumns:
                -
                    name: id_machine_table
                    referencedColumnName: id
            inverseJoinColumns:
                -
                    name: id_base_model
                    referencedColumnName: id
        orderBy: null
lifecycleCallbacks: {  }

关于postgresql - 使用 PostgreSQL : "SQLSTATE[42P01]: Undefined table: 7 ERROR: the relation does not exist" 的 Doctrine2 ManyToMany 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39347129/

相关文章:

database - 优化 Redshift 查询的大 IN 条件

java - SQL query.setParameter() 未在 Java 中获取单引号字符串

php - symfony Doctrine 类型日期时间预期格式 y-m-d h :i:s

symfony - Assetic 和我的 Assets

mysql - 如何在 Symfony2 数据库查询中使用 MATCH

mysql - symfony 2多对多关系粗略

postgresql - 在 docker 中运行 Postgresql 命令

mysql - PostgreSQL 中的 Base58 编码器函数

php - Composer 与私有(private)存储库的多级依赖

php - Doctrine 没有加载类 MappingException