В проекте я использую доктрину 2, где у меня есть от одного до многих отношений:
Клиент => Заказы
Моя проблема аналогична этому вопросу, за исключением того, что я уже получаю сообщение об ошибке при попытке получить объект с помощью arraycollection ():
Warning: spl_object_hash() expects parameter 1 to be object, null given in C:\xampp\htdocs\test.example.com\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php on line 2852
Содержимое Customer.php выглядит примерно так:
<?php namespace Application\Entity; use Doctrine\ORM\Mapping as ORM; /** * Customer * * @ORM\Table(name="customer", uniqueConstraints={@ORM\UniqueConstraint(name="foo", columns={"foo"})}) * @ORM\Entity */ class Customer { public function __construct() { $this->orders = new \Doctrine\Common\Collections\ArrayCollection(); } /** * @var \Application\Entity\User * * @ORM\Id * @ORM\GeneratedValue(strategy="NONE") * @ORM\OneToOne(targetEntity="Application\Entity\User") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="id", referencedColumnName="id") * }) */ private $id; /** * * @var \Doctrine\Common\Collections\ArrayCollection * * @ORM\OneToMany(targetEntity="Order", mappedBy="customer", fetch="EAGER") * */ private $orders; /** * @return \Doctrine\Common\Collections\ArrayCollection a list of orders related to the customer */ public function getOrders() { return $this->orders; } /** * Set id * * @param \Application\Entity\User $id * @return Customer */ public function setId(\Application\Entity\User $id) { $this->id = $id; return $this; } /** * Get id * * @return \Application\Entity\User */ public function getId() { return $this->id; } }
Обновление: И вот код, вызывающий ошибку:
$entityManager->getRepository('\Application\Entity\Customer')->find($user->getId());//debugger shows $user->id = 7 so that isn't causing the problem
Update2: Поскольку идентификатор внутри клиента является объектом User, я также пробовал следовать без успеха:
$entityManager->getRepository('\Application\Entity\Customer')->find($user);
Я уже пробовал ответить на эту страницу, но это не помогло! Что мне нужно сделать, чтобы это работало?
Класс сущности, в котором я хотел добавить отношение «один ко многим», имел первичный ключ, который был сопоставлен как отношение «один к одному» к другому объекту, который вызывал проблему. Поэтому, чтобы обойти эту проблему, я удалил отношение «один к одному» и обновил свой код для работы без сопоставления «один к одному».