Доктрина не получает вновь добавленную запись - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть функция, которая выполняет 2 действия.

  1. Сохраняет существующий или новый элемент / запись
  2. Запрос и изменение порядка элементов

Алгоритм кода выглядит следующим образом:

public function doSomething($id = 0)
{
    $em = $this->getEntityManagerFromSomewhere();
    $service = $this->getSomeServiceFromSomewhere();
    $repo = $em->getRepository(Item::class);

    $conn = $em->getConnection();
    $conn->beginTransaction();

    if ($id) {
        $item = new Item();
    } else {
        $item = $repo->find($id);
    }

    $em->persist($item);
    $em->flush();

    $items = $repo->getAllItems();
    // changes are saved to the database
    $service->rearrangeItems($items);

    $conn->commit();
}

Теперь у меня проблема в том, что если это новый элемент, когда мы пытаемся получить все элементы, этот новый элемент не включается длякакая-то странная причина.

Я пробовал что-то самостоятельно, и единственное, что мне подходит, это вставить

$em->clear(); // after flush

Я не уверен, что это лучший способ подойти к этомуили если я неправильно использую эту функцию.Это работает, хотя, когда я проверял это.

1 Ответ

0 голосов
/ 14 декабря 2018
public function doSomething($id = 0)

Существует $ id по умолчанию 0, На самом деле, вы создаете элемент каждый раз.

  if ($id) {
        $item = new Item();
        $em->persist($item);
    } else {
        $item = $repo->find($id);
    }

также вам не нужно сохранять, если вы не обновляете или не создаете новыйItem.

Или как я понял.

if($id)
{
    $item = $em->getRepository(Item::class)->find($id)
}
else
{
    $item = new Item();
    $em->persist($item);
}
$em->flush();
...