遇到问题,我需要在CGridView中获取所有模型的ID(不仅可见但是所有模型)。为此我使用它的DataProvider - 从中获取一个条件并将其传递给命令构建器
$criteria = $dataProvider->getCriteria();
$criteria->select = 'id';
$command = Y::db()->commandBuilder->createFindCommand('tableName', $criteria);
$ids = $command->queryColumn();
在通过相关表格进行过滤之前,它工作正常。例如,用户向网格的过滤器添加一个数字 - “门牌号码”= 24.当相关表格发生时 - “地址”添加到$criteria->with
并且“address.home_number = 24”添加到{{1} }。
ActiveRecord自动解析条件的“with”属性并应用连接,因此我们的条件可以正常使用它,但CommandBuilder - 不是。我不能使用AR,因为它非常慢。我必须使用Builder,但我无法进行连接,可能会应用20多个过滤器。
如果我可以通过AR生成SQL然后将其传递给Builder,那就太棒了。
答案 0 :(得分:0)
经过一番研究后,我创建了自定义类ActiveFinder - Yii框架的CActiveFinder类的副本。所以你可以传递你要搜索的模型和新静态方法中的标准:
$model = new User();
$criteria = new CDbCriteria();
$criteria->select = 't.id';
$command = ActiveFinder::getCommand($model, $criteria);
// $command variable have the SQL text
$sql = $command->text;
在这里你可以上课 - https://github.com/LinGG/ActiveFinder