Symfony:解决 Doctrine EntityNotFoundException

问题描述 投票:0回答:2

我想要利用一个预先存在的 Oracle 数据库。

为此,我创建了 2 个类,并用多对一和一对多进行映射。但有些元素在第一类中与第二类中没有对应关系,但 id 存在。它不会返回任何错误。

我希望它给我发送一个空值。如何做到这一点?

class Fact
{

/**
     * 
     * @ORM\OneToMany(targetEntity="present\UserBundle\Entity\March",mappedBy="fact", cascade={"persist","remove"})     
     */
    private $march;
}

class March
{
   ...

     /*
     * @var \present\PublishBundle\Entity\image
        * @ORM\ManyToOne(targetEntity="present\UserBundle\Entity\fact",inversedBy="march", cascade={"persist"}) 
      * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id",referencedColumnName="id")
     * })
     * })  
     */
     private $facture;
     }

错误

未找到 ID id(0) 的“present\UserBundle\Entity\Client”类型的实体

谢谢你

database symfony doctrine dql
2个回答
1
投票

我还没有测试你的代码,但我认为你的错误必须执行你的 JoinColumn 声明:

@ORM\JoinColumn(name="id",referencedColumnName="id")

在文档here中,它说 name 属性将为您的关系定义列的名称。 但我想这里的“id”也指的是你的主键。

要解决此问题,请尝试将 name="id" 更改为 name="march_id",或删除 JoinColumn。

编辑:我已经阅读了一些快速错误,没有看到它引用客户端实体,你也可以显示与此关系相关的代码吗?


0
投票

我知道这个讨论已经很晚了,但我找到了一个可能的解决方案。可以使用 PHP 的异常来处理此类情况。

就我而言,我有一个与零个或一个地址相关的客户表。所以,我才能拥有这样的幸福之路:

$streetName = $customer->getAddress()->getStreetName();
echo $streetName; // Baker Street

或者可能会抛出异常,所以解决方法是这样的:

use Doctrine\ORM\EntityNotFoundException;

try {
    $streetName = $customer->getAddress()->getStreetName();
} catch (EntityNotFoundException $e) {
    $streetName = 'No address provided!';
}
© www.soinside.com 2019 - 2024. All rights reserved.