如何检查是否在 Doctrine2 存储库中找到了对象?

How do I check if object was found in a Doctrine2 repository?

我正在通过 PK 找到一个实体,如下所示:

$ent = $em->getRepository('AppBundle:Representative')->find($id)

检查$ent是否是一个真正的Representative对象的正确方法是什么?我对 real 的意思是 $ent 当前存在于 DB 上并被返回,因为我计划对 INSERTUPDATE 使用相同的结果.在伪代码中,我脑子里的是:

if (ent is Representative)
{
    // Update its values
} else {
    // Create a new Representative
}

我在考虑使用 is_object() 甚至 instanceof,但我不确定他们是否会完成这项工作,或者 $ent 是否会成为一个对象,即使 Representative 没有存在于数据库中。对此有何建议?我怎样才能做到这一点?

EntityRepository::find() 方法(您使用)returns 和 object,或者如果在数据库中找不到对象,则 null。以下所有条件均有效:

if ($entity) {
}

if (null !== $entity) {
}

if ($entity instanceof Representative) {
}

选择最适合您的编码标准的一种,并始终如一地使用它。

如果没有找到就不需要创建新的对象,最好抛出异常并妥善处理。

这个怎么样:

$product = $this->getDoctrine()
        ->getRepository('AppBundle:Product')
        ->find($id);

    if (!$product) {
        throw $this->createNotFoundException(
            'No product found for id '.$id
        );

来源:click me