我需要检查数据库中的两个字段,是否存在它们以更新它们,以及是否不创建新字段。
我想这样做而不使用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();
}
答案 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();
}
顺便说一句,将类和变量重命名为它们实际代表的内容,将使发现此类逻辑错误变得更加容易。