0

现在我正在使用以下方法:

$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['filters']['claims'] 是数组。然而,这并不够灵活,因为 filterByArray 似乎仅限于简单地将一列映射到一个值。

有没有办法以一种我可以使用数据库中的 created_at 列两次来设置小于和大于的方式使用 filterByArray 或者是否有更好的方法来动态构建查询,例如使用下面的条件?

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

如果是这种情况,访问 paginate 方法的最佳方法是什么?

4

1 回答 1

2

我想我在写这篇文章时有一个愚蠢的时刻。所需要的只是结束链,然后再恢复它:

$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);

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

于 2012-12-10T21:30:20.230 回答