0

現在、私は次の方法を使用しています。

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

$ conditionは、セッション内の値へのキーによって入力される動的配列です。

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

$ _SESSION['filters']['claims']が配列です。ただし、filterByArrayは、1つの列を1つの値に単純にマッピングするように制限されているように見えるため、これは実際には十分な柔軟性がありません。

データベースのcreated_at列を2回使用して、より小さい値とより大きい値を設定できるように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 に答える