现在我使用以下方法:
$claims = ClaimQuery::create()
->leftJoinUser()
->withColumn('CONCAT(User.Firstname, " ", User.Lastname)', 'name')
->withColumn('User.Email', 'email')
->filterByArray($conditions)
->paginate($page = $page, $maxPerPage = $top);
$ conditions是一个动态数组,由会话中的键值填充。
$_SESSION['filters']['claims'][$filter] = $value;
$ _ SESSION ['过滤器'] ['声明']作为阵列。然而,这不够灵活,因为filterByArray似乎仅限于将一列映射到一个值。
有没有办法以一种方式使用filterByArray,我可以使用我的数据库中的created_at列两次来设置小于或大于或者有更好的方法来动态构建查询,例如使用下面的条件?
$criteria = new Criteria();
$criteria->add(ClaimPeer::Status, $status);
如果是这种情况,访问paginate方法的最佳方法是什么?
答案 0 :(得分: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);
如果有人知道更清洁或更有效的解决方案,请告诉我。