doctrine2 метод find возвращает тот же объект - PullRequest
0 голосов
/ 19 января 2012

$test есть другие $type и цена на него разная.В корзине может быть $test с таким же id, но с другим $type и это другой продукт (объект).

Пример:

    foreach ($cart as $order) {
        $test = $em->getRepository('OrfosCoreBundle:Test')->find($order['test_id']);
        $test->setType($order['test_type']);
        $tests[] = $test;
        $test = null;
    }

и в массиве $tests доктрина возвращает тот же объект, если $order['test_id'] == предыдущий $order['test_id']

array
  0 => 
    object(Orfos\CoreBundle\Entity\Test)[105]
  1 => 
    object(Orfos\CoreBundle\Entity\Test)[105]

Как я могуполучить новый объект?

1 Ответ

1 голос
/ 30 января 2012

Объекты однозначно идентифицируются по идентификатору (первичный ключ, другими словами).Две сущности с одинаковым идентификатором - это один и тот же объект, когда вы думаете о ORM.Так что у вас будет только массив, полный ссылок на один и тот же объект (Doctrine\ORM\EntityRepository#find также получит тот же экземпляр, если он зарегистрирован!) Что вам, вероятно, следует сделать, это создать новые экземпляры вашей сущности Test, назначить всеприсваивает им значения, вызывая все разные сеттеры, которые вы определили, сохраните их через Doctrine\ORM\EntityManager#persist() и заполните массив.Сброс EntityManager с помощью Doctrine\ORM\EntityManager#flush() сохранит все элементы в массиве в db для отдельных записей.

Если вы хотите вместо этого клонировать объект, вам придется работать с Doctrine\ORM\EntityManager#detach(), что я бы не сталне советую вам, если вы только начинаете с ORM.В этом случае рассмотрите мое решение, опубликованное в списке рассылки Doctrine о Cloning Persisted Entities

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