Doctrine2-在没有ID的情况下添加或更新

时间:2019-05-31 11:06:24

标签: php database symfony doctrine-orm

我需要检查数据库中的两个字段,是否存在它们以更新它们,以及是否不创建新字段。

我想这样做而不使用id作为post参数。我试图使用$firstFiled参数进行搜索。

它引发错误

  

“在null上调用成员函数setFirstName()”

并且数据库中没有任何更改。

我的代码:

public function import($firstName, $lastName)
{
    if($firstName instanceof MyEntity) {

        $new = $this->getMyEntityRepository()->findOneBy([
            'firstName' => $firstName,
            'lastName' => $lastName,
        ]);

    } else {
        $new = new MyEntity();
        $this->em->persist($new);
    }

    $new->setFirstName($firstName);
    $new->setLastName($lastName);
    $this->em->flush();

}

1 个答案:

答案 0 :(得分:2)

该代码对我来说没有多大意义;不是条件,也不是嵌套的MyEntity对象。

您可能想要的是查找并获取对象,或者如果找不到则实例化一个新对象。那是假设名字和姓氏实际上不是同一类的实例。

编辑:请注意,您需要实际的名字和姓氏才能在存储库中找到实体。

类似这样:

public function import($firstName, $lastName, $newFirstName, $newLastName)
{
    # Get entity from the repository using the current values
    $new = $this->getMyEntityRepository()->findOneBy([
        'firstName' => $firstName,
        'lastName' => $lastName,
    ]);

    # If no entity is found, create a new one
    if(!$new instanceof MyEntity) {
        $new = new MyEntity();
        $this->em->persist($new);
    }

    # Update the existing or new entity with the new values
    $new->setFirstName($newFirstName);
    $new->setLastName($newLastName);
    $this->em->flush();

}

顺便说一句,将类和变量重命名为它们实际代表的内容,将使发现此类逻辑错误变得更加容易。