[英]Yii 1, get SQL generated by CDbCriteria
有一个问题,我需要在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”添加到$criteria->condition
。
ActiveRecord会自动解析条件的“具有”属性并应用联接,因此我们的条件可以满足要求,但CommandBuilder-可以。 我无法使用AR,因为它的速度非常慢。 我必须使用Builder,但无法进行联接,可能会应用20多个过滤器。
如果我能得到AR生成的SQL,然后将其传递给Builder,那就太好了。
经过研究后,我创建了自定义类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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.