有问题,我需要在CGridView中获取所有模型的id(不仅可见,而且所有模型)。对于我使用其dataProvider - 从它那里得到一个标准,并把它传递给命令生成器Yii 1,获取由CDbCriteria生成的SQL
$criteria = $dataProvider->getCriteria();
$criteria->select = 'id';
$command = Y::db()->commandBuilder->createFindCommand('tableName', $criteria);
$ids = $command->queryColumn();
这是工作的罚款,直到我们得到了通过相关表过滤。例如,用户向网格的过滤器添加数字 - “House Number”= 24.当发生相关表 - “地址”增加到$criteria->with
和“address.home_number = 24”增加到$criteria->condition
。
ActiveRecord会自动分析条件的“with”属性并应用连接,所以我们的条件会很好,但是CommandBuilder不是。我无法使用AR,因为它速度很慢。我必须使用Builder,但我无法连接,可能会应用超过20个过滤器。
如果我可以得到由AR生成的SQL,然后将它传递给Builder - 那将会很棒。
即使这个定制ActiveFinder不是也许做的最好的方法这,它的作品。从我的角度来看,如果ActiveFinder扩展CActiveFinder并添加这个静态getCommand并覆盖应该更改的其他函数将会更好... – zmilan
我刚在短时间内为我的需要创建了它。如果你想让它变得更好,欢迎您:) –
我明白,做这项工作足够好。我只是提到它,因为你出于某种原因有-1。我想说,即使这不是一个很好的例子,但它仍然能够完成这项工作。 – zmilan