遇到问题,我需要在 CGridView 中获取模型的所有 ID(不仅是可见的,而且是所有模型)。为此,我使用它的 DataProvider - 从中获取标准并将其传递给命令生成器
$criteria = $dataProvider->getCriteria();
$criteria->select = 'id';
$command = Y::db()->commandBuilder->createFindCommand('tableName', $criteria);
$ids = $command->queryColumn();
在我们通过相关表进行过滤之前,它工作正常。例如,用户将一个数字添加到网格的过滤器 - “House Number” = 24。当它发生时,相关表 - “address”添加到$criteria->with
并且“address.home_number = 24”添加到$criteria->condition
。
ActiveRecord 会自动解析条件的“with”属性并应用连接,所以我们的条件会很好,但 CommandBuilder - 不是。我不能使用 AR,因为它非常慢。我必须使用 Builder,但我无法进行连接,可能应用了 20 多个过滤器。
如果我能得到 AR 生成的 SQL,然后将其传递给 Builder——那就太好了。