2017-07-09 10 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; 

Productエンティティ

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

[意味的なエラー] 'name LIKE:name'に近い行0、col 82:エラー:クラスShleif \\ CatalogBu​​ndle \\ Entity \\ OrderProductにproduct.nameという名前のフィールドまたはアソシエーションがありません " –

答えて

1

です。それはあなたが参加したエンティティをどう扱うかではありません。またProductエンティティにはOrderProductから参加する必要があります。それは次のようになります。

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

あなたは本当にそれが実際のエンティティと一致し、かつより少ない混乱となっ$orderProductであるためにあなたのOrderエンティティに$productの名前を変更する必要があります。いったんそれを行うと、クエリはより意味をなさないでしょう:

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

このスローエラー、beacause' 'oプロダクトエンティティではなく、 'OrderProduct'エンティティとリンクしています –

+0

私の答えを更新しました –

+0

ありがとう、私は夕方に試してみます –

関連する問題