我的offset = 0 和limit = 10 的查询结果恰好是一行。
当我使用 offset = 1 时,应该没有结果。
但是像这样的查询
$query = Yii::app()->db->createCommand();
$criteria = new CDbCriteria();
$criteria->addCondition('f.deleted = 0 AND b.version = f.version');
$criteria->params = [];
if ($idUserAnswerer)
{
$query->leftJoin('bar AS b', 'b.idF = f.id');
$criteria->addCondition('f.idUserOwner = :idUserOwner');
$criteria->params['idUserOwner'] = $idUserOwner;
}
$query->select('*')
->from('foo AS f')
->where($criteria->condition)
->bindValues($criteria->params);
$query->order('FIELD(t.type,
' . X::X_TYPE_ID_A . ', ' . X::X_TYPE_ID_B . ',
' . X::X_TYPE_ID_C . '), b.created_time, b.votes DESC');
$data = $query->limit(10, 2)->queryAll();
(提示:我必须使用 $criteria
,因为在某些时候我必须使用 inCondition)
我仍然得到这一行。但通常(当我直接在我的数据库中执行此查询时)我不应该得到结果。
知道为什么 Yii 会吐出这一行吗?
最佳答案
这是查询生成器的问题。您需要一个特定的顺序,绑定(bind)值应该在查询结束时完成。
这是因为 Yii 在绑定(bind)值时做了一个准备语句。然后缓存这条语句。然后你附加你的订单并限制它。当你做查询时,使用以前缓存的语句,没有顺序和限制。我认为这是设计使然。
所以总是最后绑定(bind)值:
$query = Yii::app()->db->createCommand();
$data = $query->select('*')
->from('tbl AS t')
->where('idCategory=:catid')
->order('id DESC')
->limit(2, 2)
->bindValues(array(':catid' => 151))
->queryAll();
关于php - 为什么 Yii Query Builder 忽略 offset()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24935806/