敏捷工具包 - 与模型结合使用的OR语句

时间:2013-07-29 17:26:02

标签: atk4 agiletoolkit

我有一个模型,我想从中选择“caller”或“callee”为给定值的所有行,以便在网格中显示。

我已经尝试了很多不同的方法来实现这一点,并且无法随时随地使用它。

我在Grid上有一个工作过滤器,它按日期(开始和结束日期),按状态(“ANSWERED”,“NO_ANSWER”)缩小结果,我还可以为'caller'和'callee'添加条件,但是如何让它显示“caller”或“callee”与当前$ UserID匹配的所有行?基本上显示用户参与的所有调用(行)?

MySQL查询本身是一个简单的OR构造,但我如何将它“提供”到模型或网格中,以便它与页面上的其他过滤器很好地配合?

1 个答案:

答案 0 :(得分: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)
);