0

问:如何添加“OR”运算符$criteria

这里参考

这是我的 $criteria 条件之一。

$criteria->addSearchCondition('t.status','Reviewing',true,"OR","LIKE");
$criteria->addSearchCondition("status",'On Hold');

这是来自 $criteria 的 sql

SELECT COUNT(*)
FROM `request` `t`
JOIN users u ON (t.creator = u.id)
WHERE ((t.status LIKE :ycp0) AND (status LIKE :ycp1)) AND (reviewers LIKE :ycp2)

这个条件((t.status LIKE :ycp0) AND (status LIKE :ycp1)) 应该是((t.status LIKE :ycp0) OR (status LIKE :ycp1))

4

2 回答 2

3

我认为您需要进行如下更改

$criteria->addSearchCondition('t.status','Reviewing',true,"AND","LIKE");
$criteria->addSearchCondition("status",'On Hold','true','OR');

addSearchCondition 函数将运算符附加到先前的条件

于 2012-09-30T11:49:28.357 回答
2

我对 YII 不是很流利,但是您的第二个标准:

 $criteria->addSearchCondition("status",'On Hold');

将搜索条件附加到现有条件。搜索条件和现有条件将通过默认为“AND”的指定运算符连接。搜索条件是使用带有给定列名和搜索关键字的 SQL LIKE 运算符生成的。

没有指定它应该是OR'ed,但默认情况下是AND'ed。它可能已经为您指定OR了:

$criteria->addSearchCondition("status",'On Hold', true, 'OR');

此外,您不需要在这里使用搜索条件,您只是想比较。条件相同t.status。因此,您可能更容易使用更直接的标准,例如addColumnCondition

$criteria->addColumnCondition(
    array('t.status' => 'Reviewing', "status" => 'On Hold'), 'OR'
);

我认为这可以取代你的两条线。

于 2012-09-30T11:49:44.650 回答