2017-07-09 23 views
1

有我的實體:與物業產品查詢中使用的彙總表的Symfony2

Order實體

/** 
* @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

你回來,你沒有收到什麼?這是在'LIKE'查詢中使用通配符的正確方法。 –

+0

[語義錯誤] line 0,col 82'name LIKE:name'附近:Error:Class Shleif \\ CatalogBu​​ndle \\ Entity \\ OrderProduct has no field or association named product.name「 –

回答

1

我看到現在的問題是。這不是你如何處理聯合實體。您還需要加入OrderProductProduct實體。它應該是這樣的:

$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'].'%') 
; 
+0

This throw error,beacause''o .product','p''鏈接到'OrderProduct'實體,而不是'Product'實體 –

+0

更新了我的答案。 –

+0

謝謝,我會在晚上嘗試 –