gpt4 book ai didi

php - Doctrine 返回 null 代替 EntityNotFoundException

转载 作者:行者123 更新时间:2023-12-04 00:31:08 24 4
gpt4 key购买 nike

我在我的数据库中破坏了 FK,如果我加载一个实体并请求相关实体 Doctrine 将抛出 \Doctrine\ORM\EntityNotFoundException .

对于有问题的实体,我更喜欢在 FK 被破坏的地方,它会返回 NULL 而不是抛出异常。这是因为它在 Twig 模板中发生了异常,我希望 Twig 在这种情况下不必处理异常。

下面是一个示例配置。

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Foo\Click" table="clicks">
<id name="id" type="bigint" column="click_id">
<generator strategy="IDENTITY"/>
</id>
<!-- .. -->
<many-to-one field="visitor" target-entity="Foo\Visitor" fetch="LAZY">
<join-columns>
<join-column name="visitor_id" referenced-column-name="visitor_id"/>
</join-columns>
</many-to-one>
</entity>

<entity name="Foo\Visitor" table="visitors" read-only="true">
<id name="visitorId" type="integer" column="visitor_id">
<generator strategy="IDENTITY"/>
</id>
<!-- ... -->
<one-to-one field="firstClick" target-entity="Foo\Click" fetch="LAZY">
<join-columns>
<join-column name="click_id" referenced-column-name="click_id"/>
</join-columns>
</one-to-one>
</entity>
</doctrine-mapping>

以下是预期结果的示例,其中将点击作为访问者 ID,但该 ID 不存在访问者记录。在这种情况下,我宁愿不必将逻辑包装在 Try/Catch 中,而是使用 Click::getVisitor()返回 null ;
<?php
$clickOne = $entityManager()->find(Foo\Click::class, 1);
$v = $clickOne->getVisitor();

if ($v !== null) {
echo $v->getId(); // may throw Doctrine\ORM\EntityNotFoundException
}

Doctrine 是否有针对此的策略?

更新:添加了示例配置和代码,现在我明白了为什么使用简单的 Doctrine 配置无法实现这一点。

最佳答案

EntityNotFoundException从 Doctrine 的代理抛出。所以你可以使用 EAGER加载方法以摆脱代理并获取 NULL 而不是异常。

关于php - Doctrine 返回 null 代替 EntityNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51893358/

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