2012-03-22 22 views
11

Tôi phải tự động thêm các biểu thức OR vào trình tạo truy vấn được trả về bởi getListQueryBuilder, ngay sau khi thêm mệnh đề where. Tôi không thể tìm thấy bất kỳ cách phù hợp để làm điều này, tôi chỉ mới bắt đầu học Doctrine.Chaining orX trong trình tạo truy vấn Doctrine2

Làm cách nào để "chuỗi" một số được cho là orX và thêm chúng vào trình tạo của tôi?

public function getListQueryBuilder($ownerId) 
{ 
    $qb = $this->createQueryBuilder('t'); 

    return $qb 
     ->where($qb->expr()->eq('t.user', ':user')) 
     ->setParameter('user', $ownerId); 
} 

$builder = getListQueryBuilder(4); 

// $ORs is a dynamically builded array, here is just an example 
$ORs = array(); 
$ORs[] = $builder->expr()->like("t.name", 'my name'); 
$ORs[] = $builder->expr()->like("t.description", 'desc'); 

// Adding ORs to the builder 
$builder->andWhere($builder->expr()->orX(/* here */)); 

Trả lời

20

Bạn có thể kiểm tra this solution:

$orX = $builder->expr()->orX(); 
foreach($ORs as $or) { 
    $orX->add($or); 
} 
$builder->andWhere($orX); 
+7

Nếu bạn không muốn đọc toàn bộ bài viết: $ orX = $ builder-> expr() -> orX(); foreach ($ ORs là $ hoặc) { $ orX-> thêm ($ hoặc); } $ builder-> andWhere ($ orX); –

+1

@LouTerrailloune mà nên trở thành một phần của câu trả lời –

+0

Điều đó đã làm cho các trick cho tôi! cổ vũ cho chỉ nó ra :) – Sharpy35

8

Tôi vấp vào cùng một vấn đề và cố gắng:

$builder->andWhere($builder->expr()->orX($ORs)); 

nhưng nó không hoạt động kể từ orX cuộc gọi "trở lại mới expr \ Orx (func_get_args()); " nội bộ và bạn kết thúc với một cái gì đó giống như mảng (array (or1, or2))

đã nhìn API tuy nhiên tôi đã tìm, bạn có thể làm điều này:

$builder->andWhere($builder->expr()->orX()->addMultiple($ORs)); 

HOẶC tôi sử dụng $ ORS bảng ở tất cả nhưng vấn đề:

$orx = $builder->expr()->orX(); 
$orx->add($builder->expr()->like("t.name", 'my name')); 
$orx->add($builder->expr()->like("t.description", 'desc')); 
$builder->andWhere($orx); 
Các vấn đề liên quan