Search code examples
symfonydoctrinesymfony4

Symfony4 - Undefined index: on entity join


I'm getting an

undefined index: order

error even though from what I can tell using this documentation I'm doing everything right. Any ideas?

OrdersRepository

public function findByDateAndEmployee(\DateTime $date, int $employeeId)
{
    return $this->createQueryBuilder('o')
        ->select('o')
        ->join('o.employees' ,'e')
        ->where('e.id = :id')
        ->setParameter('id',$employeeId)
    ->getQuery()->getSql();
}

Orders Entity

class Orders
{
  ...
    /**
     * One Order has Many Employees.
     * @ORM\OneToMany(targetEntity="Employee", mappedBy="order", cascade={"persist", "remove"}, orphanRemoval=TRUE)
     */
     private $employees;

I know if I change the variable in "mappedBy" it will change the error message to whatever the variable name is, however when you see below "order" should be the mappedBy variable (at least, I think).

OrderEmployees Entity

class OrderEmployees
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="integer")
     */
    private $orderId;

    /**
     * @ORM\Column(type="smallint")
     */
    private $employeeId;

    /**
     * @ORM\ManyToOne(targetEntity="Orders", inversedBy="employees")
     * @ORM\JoinColumn(name="order_id", referencedColumnName="id")
     */
    private $order;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getOrderId(): ?int
    {
        return $this->orderId;
    }

    public function setOrderId(int $orderId): self
    {
        $this->orderId = $orderId;

        return $this;
    }

    public function getEmployeeId(): ?int
    {
       return $this->employeeId;
    }

    public function setEmployeeId(int $employeeId): self
    {
       $this->employeeId = $employeeId;

       return $this;
    }

    public function getOrder(): Orders
    {
        return $this->order;
    }

    public function setOrder(Orders $order): self
    {
        $this->order = $order;

        return $this;
    }
}

Solution

  • Changing targetEntity="Employee" to targetEntity="OrderEmployees" in your Orders entity should help.

    From the docs:

    targetEntity: FQCN of the referenced target entity. Can be the unqualified class name if both classes are in the same namespace.