我有一个模型,我想从中选择“caller”或“callee”为给定值的所有行,以便在网格中显示。
我已经尝试了很多不同的方法来实现这一点,并且无法随时随地使用它。
我在Grid上有一个工作过滤器,它按日期(开始和结束日期),按状态(“ANSWERED”,“NO_ANSWER”)缩小结果,我还可以为'caller'和'callee'添加条件,但是如何让它显示“caller”或“callee”与当前$ UserID匹配的所有行?基本上显示用户参与的所有调用(行)?
MySQL查询本身是一个简单的OR构造,但我如何将它“提供”到模型或网格中,以便它与页面上的其他过滤器很好地配合?
答案 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)
);