使用摘要表 symfony2 进行查询



有我的实体:

具有属性产品的订单实体

/**
* @var string
*
* One Order has Many OrderProduct.
* @ORMOneToMany(targetEntity="OrderProduct", mappedBy="order")
*/
private $product;
/**
* CatalogOrder constructor.
*/
public function __construct() {
$this->product = new ArrayCollection();
}

具有属性产品、订单和编号的订单产品实体(需要此实体来存储订购产品的数量(

/**
* @ORMManyToOne(targetEntity="CatalogOrder", inversedBy="product")
* @ORMJoinColumn(name="order_id", referencedColumnName="id")
* @AssertNotBlank()
*/
private $order;
/**
* @ORMManyToOne(targetEntity="Product", inversedBy="order")
* @ORMJoinColumn(name="product_id", referencedColumnName="id")
* @AssertNotBlank()
*/
private $product;
/**
* @var int
*
* @ORMColumn(name="number", type="integer")
*/
private $number;

具有属性订单的产品实体

/**
* @ORMOneToMany(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'].'%');

我知道你的问题现在在哪里。 这不是处理已加入实体的方式。 您还需要从OrderProduct加入Product实体。它应该看起来像这样:

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

实际上,您应该将Order实体中的$product重命名为$orderProduct,以便它与实际实体匹配,并且变得不那么混乱。 一旦你这样做了,你的查询将更有意义:

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

最新更新