php - 未找到 Doctrine 映射案例

标签 php orm doctrine mapping

我有一个引用表 B 的表 A。

编辑:使用的数据库引擎是 MyISAM。

Doctrine 映射就像一个魅力,除非我在数据库中有无效的情况,表 A 中引用的 ID 在表 B 中并不存在。

所以当你执行这段代码时:

$objectB = $objectA->getObjectB();//with lazy load

您实际上得到了 $objectB 代理对象,它不为空。所以 !empty($objectB) 将通过。

当您尝试访问 $objectB 的任何属性时,例如:

$objectB->getName();

您得到未找到实体异常。您无法在代码中预测 $objectB 实际上不存在并且 $objectB 没有 Name 属性。

$objectB 实际上应该设置为 null,但事实并非如此。

Hibernate 实际上有映射属性 not-found=ignore 将丢失的对象设置为 NULL 而不是将其设置为 Proxy 对象。 Doctrine 有类似的东西吗?

附言。当然,您始终可以捕获 Entity not found 异常,并尝试使用它。或者您可以在表 A 中映射实际的 objectB_ID 字段,但这些都不是 100% 干净的解决方案。

我希望有人能给出答案。

谢谢

最佳答案

except when I have non valid case in the DB where referenced ID in table A does not really exist in table B

IMO 这是一个垃圾进,垃圾出的情况。如果您的架构中 TableA 在 TableB 中可能有也可能没有行,则您应该在 TableB 上实现 FK 约束,这样如果从 TableB 中删除了一行,则 TableA 中引用已删除行的任何行的值都将更改为 null。

如果您真的想推进您提议的模式实现,您可以尝试这样做:

$rowExists = ($objectA->getObjectB()->getId() > 0) ? true : false;

这当然假设您在表 B 上有一个 id 列并且它是未签名的。

-- 更新--

try {
    $objectB = $objectA->getObjectB();
} catch (Exception $e) {
    $objectB = null;
}

if ($objectB instanceof ClassB) {
    // Do work
}

关于php - 未找到 Doctrine 映射案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11057504/

相关文章:

orm - Entity Framework : Generating database from classes

java - Hibernate 错误 : org. hibernate.NonUniqueObjectException:具有相同标识符值的不同对象已与 session 相关联

mysql - Symfony2 : Doctrine "could not find driver"

php - 减少包含文件的数量

php - Foreach 给出 undefined variable 错误

php mysql 在 INSERT 语句中转义字符

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

php - 将 Access-Control-Allow-Origin 添加到 PHP 中的 header

spring - @PostPersist 不会将审计记录保存到数据库

php - Doctrine 2 如何在不调用实体构造函数的情况下检索实体?