代码之家  ›  专栏  ›  技术社区  ›  Element Zero

symfony4-使用where子句访问联接表?

  •  0
  • Element Zero  · 技术社区  · 7 年前

    我拥有以下实体:

    class Orders
    {
      ...
          /**
          * One Order has Many Employees.
          * @ORM\ManyToMany(targetEntity="Employee")
          * @ORM\JoinTable(name="orders_employees",
          *      joinColumns={@ORM\JoinColumn(name="order_id", referencedColumnName="id")},
          *      inverseJoinColumns={@ORM\JoinColumn(name="employee_id", referencedColumnName="id")},
          *      )
          */
          private $employees;
    

    我正在努力做到以下几点:

       $orders = $this->getDoctrine()->
            ->getRepository(Orders::class)
            ->findBy(['employees' => $userId);
    

    但是,这在生成SQL时不起作用:

    ... FROM orders t0 WHERE orders_employees.employee_id = ?
    

    基本上,它在生成SQL时缺少join子句。我错过什么了吗?我不知道为什么这样不行。

    1 回复  |  直到 7 年前
        1
  •  0
  •   M Khalid Junaid    7 年前

    $employee = $this->getDoctrine()->getRepository(Employee::class)->find($userId);
    $orders = $employee->getOrders();
    

    或者可以使用查询生成器

    $repo = $this->getDoctrine()->getRepository(Orders::class);
    $orders= $repo->createQueryBuilder('o')
                    ->select('o')
                    ->join('o.employees' ,'e')
                    ->where('e.id = :id')
                    ->setParameter('id',$userId)
                    ->getResult();
    
    推荐文章