0

「呼び出し元」または「呼び出し先」がグリッドでの表示用に指定された値であるすべての行を選択するモデルがあります。

私はこれを達成するためにさまざまな方法を試しましたが、どこにも到達できません。

グリッドには、結果を日付 (開始日と終了日)、ステータス ("ANSWERED"、"NO_ANSWER") で絞り込む作業フィルターがあります。「発信者」と「呼び出し先」の条件を追加することもできますが、どのように'caller' または 'callee' が現在の $UserID と一致するすべての行を表示するにはどうすればよいですか? 基本的に、ユーザーが関与したすべての通話 (行) を表示しますか?

MySQL クエリ自体は単純な OR 構造ですが、ページ上の他のフィルターとうまく連携するように、それをモデルまたはグリッドに「フィード」するにはどうすればよいでしょうか?

4

1 に答える 1

1

DSQL の orExpr() メソッドを使用して、必要に応じて SQL を生成できます。

例えば、

$m = $this->model->debug();            // enable debug mode
$user_id = $this->api->auth->model->id;// currently logged in user ID
$q = $m->_dsql();                      // get models DSQL

$or = $q->orExpr();                    // initialize OR DSQL object
$or->where('caller', $user_id)         // where statements will be joined with OR
   ->where('callee', $user_id);

// use one of these below. see which one works better for you
$q->where($or);                        // add condition with OR statements
$q->having($or);                       // add condition with OR statements

もちろん、これらすべてを短く書くこともできます。

$m = $this->model->debug();            // enable debug mode
$user_id = $this->api->auth->model->id;// currently logged in user ID
$q = $m->_dsql();                      // get models DSQL

$q->where($q->orExpr()
    ->where('caller', $user_id)
    ->where('callee', $user_id)
);
于 2013-07-30T21:55:59.050 に答える