8

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

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

检查是否$ent是真实代表对象的正确方法是什么?我的意思$ent当前存在于 DB 上并返回,因为我计划对INSERT和使用相同的结果UPDATE。在伪代码中,我的想法是:

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

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

4

2 回答 2

15

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

if ($entity) {
}

if (null !== $entity) {
}

if ($entity instanceof Representative) {
}

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

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

于 2015-06-29T12:39:27.003 回答
2

这个怎么样:

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

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

来源:点我

于 2015-06-29T12:42:50.663 回答