使用汇总表symfony2进行查询

时间:2017-07-09 20:06:32

标签: php symfony doctrine-orm symfony-2.8

有我的实体:

订购具有物业产品的实体

/**
 * @var string
 *
 * One Order has Many OrderProduct.
 * @ORM\OneToMany(targetEntity="OrderProduct", mappedBy="order")
 */
private $product;

/**
 * CatalogOrder constructor.
 */
public function __construct() {
    $this->product = new ArrayCollection();
}

OrderProduct实体,包含属性产品,订单和编号(需要此实体来存储订购产品的数量)

/**
 * @ORM\ManyToOne(targetEntity="CatalogOrder", inversedBy="product")
 * @ORM\JoinColumn(name="order_id", referencedColumnName="id")
 * @Assert\NotBlank()
 */
private $order;

/**
 * @ORM\ManyToOne(targetEntity="Product", inversedBy="order")
 * @ORM\JoinColumn(name="product_id", referencedColumnName="id")
 * @Assert\NotBlank()
 */
private $product;

/**
 * @var int
 *
 * @ORM\Column(name="number", type="integer")
 */
private $number;

具有物业订单的产品实体

/**
 * @ORM\OneToMany(targetEntity="OrderProduct", mappedBy="product")
 */
private $order;

public function __construct()
{
    $this->order = new ArrayCollection();
}

我想在前端的订单中查找商品的名称,即输入" be"并使用产品"啤酒"。显示所有订单。

我的猜测不正确:

$qb->join('o.product', 'p')
    ->where('p.product.name LIKE :name')
    ->setParameter('name', '%'.$filters['productName'].'%');

1 个答案:

答案 0 :(得分:1)

我现在看到你的问题在哪里。这不是你如何处理联合实体。您还需要加入Product中的OrderProduct实体。它应该是这样的:

$qb
    ->join('o.product', 'op')
    ->join('op.product', 'p')
    ->where('p.name LIKE :name')
    ->setParameter('name', '%'.$filters['productName'].'%')
;

您应该将$product实体中的Order重命名为$orderProduct,使其与实际实体相匹配,并且变得更加混乱。一旦你这样做,你的查询会更有意义:

$qb
    ->join('o.orderProduct', 'op')
    ->join('op.product', 'p')
    ->where('p.name LIKE :name')
    ->setParameter('name', '%'.$filters['productName'].'%')
;