有我的实体:
订购具有物业产品的实体
/**
* @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'].'%');
答案 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'].'%')
;