Doctrine2 - добавить или обновить без идентификатора - PullRequest
1 голос
/ 31 мая 2019

Мне нужно проверить в моей базе данных два поля и, если они существуют, обновить их, а если нет, создать новые.

Я хочу сделать это без использования идентификатора в качестве параметра записи.Я пытался выполнить поиск с параметром $firstFiled.

Выдает ошибку

"Вызов функции-члена setFirstName () в null"

и в базе данных нет изменений.

Мой код:

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 Ответ

2 голосов
/ 31 мая 2019

Этот код не имеет большого смысла для меня;ни условие, ни вложенные 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();

}

Кстати, переименование вашего класса и переменных в то, что они на самом деле представляют, облегчит обнаружение таких логических ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...