2012-12-10 119 views
0

現在我使用下面的方法:推動,建立一個動態查詢?

$claims = ClaimQuery::create() 
     ->leftJoinUser() 
     ->withColumn('CONCAT(User.Firstname, " ", User.Lastname)', 'name') 
     ->withColumn('User.Email', 'email') 
     ->filterByArray($conditions) 
     ->paginate($page = $page, $maxPerPage = $top); 

$條件是由會話密鑰到值填充一個動態數組。

$_SESSION['filters']['claims'][$filter] = $value; 

$ _SESSION ['filters'] ['claims']是數組。但是,這並不足夠靈活,因爲filterByArray似乎僅限於將一列映射到一個值。

有沒有辦法使用filterByArray的方式,我可以使用我的數據庫created_at列兩次設置小於和大於或有沒有更好的方式來動態構建一個查詢,如使用類似標準下面?

$criteria = new Criteria(); 
$criteria->add(ClaimPeer::Status, $status); 

如果是這種情況,訪問分頁方法的最佳方式是什麼?

回答

1

我認爲我在寫這篇文章時有一個白癡的時刻。所有需要的是結束鏈,然後恢復它:

$claims = ClaimQuery::create() 
     ->leftJoinUser() 
     ->withColumn('CONCAT(User.Firstname, " ", User.Lastname)', 'name') 
     ->withColumn('User.Email', 'email') 
     ->filterByArray($conditions); 

// FOR EXAMPLE 
if(someconditionhere){ 
    $claims = $claims 
     ->where('CreatedAt >= ?', $date_start) 
     ->where('CreatedAt <= ?', $date_end); 
} 

$claims = $claims->paginate($page = $page, $maxPerPage = $top); 

如果有人知道更清潔或更有效的解決方案,請讓我知道。