请问需要帮忙吗?
我有 2 个类,一个 Parent 类,说 Person 和一个 Child,说 Employee 使用 Doctrine 2 的类表继承映射策略。类对应的表存在于不同的数据库表中: Person 表存在于数据库中:dbOne 和 Employee 表在 dbTwo 中。
类是这样的:
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
* @Table(name="Person")
*/
class Person
{
和孩子班
/**
* @Entity
* @Table(name="Employee")
*/
class Employee extends Person
{
Employee 表的架构如下所示:
CREATE TABLE Employee (
id INT NOT NULL,
department VARCHAR(50) NOT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
ALTER TABLE Employee ADD FOREIGN KEY (id) REFERENCES **dbOne.Person**(id) ON DELETE CASCADE
其实有两个问题。
- 由于 Doctrine 为每个数据库映射一个实体管理器,如果我调用
$this->entityManager->flush();
在 Person 对象上,它会标记一个错误:
Message: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'dbOne.Employee' doesn't exist
如果我调用实体管理器(对于 dbTwo)来保存一个 Employee 对象,情况正好相反。当表在同一个数据库中时,问题不存在。请问我该如何解决这个问题?另外,如何检索实体管理器在 flush() 操作期间使用的 SQL 查询?了解生成和使用什么 SQL 会很有帮助 - 例如:
$this->entityManager->getQuery();
//显然这只是为了解释我的意思
- 第二个问题是让 Doctrine 根据 @DiscriminatorMap 详细信息集在数据库表的 discr 列中插入正确的值:Person。当值是父实例(即Person)而不是子实例(即Employee)时,这很有效。感谢您的帮助。