繁体   English   中英

Yii 1,获取由CDbCriteria生成的SQL

[英]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;

在这里您可以上课-https://github.com/LinGG/ActiveFinder

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM