2012-12-10 70 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); 

如果有人知道更清洁或更有效的解决方案,请让我知道。