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 回答