尝试缓存查询:
$cache = new CDbCacheDependency( "SELECT * FROM team WHERE team_url = '$url' LIMIT 1" );
$teamModel = Team::model()->cache( 100000, $cache )->findByAttributes( array( "team_url" => $url ) );
在日志中我看到:
system.db.CDbCommand
Querying SQL: SELECT * FROM team WHERE team_url = 'someteamname'
LIMIT 1
---
system.caching.CFileCache
Serving "yii:dbquerymysql:host=localhost;dbname=xxx:xxx_user:SELECT
* FROM `team` `t` WHERE `t`.`team_url`=:yp0 LIMIT
1:a:1:{s:4:":yp0";s:14:"someteamname";}" from cache
in
如果查询被缓存,为什么每次都要执行?
编辑:
我已确认查询正在访问数据库。
答案 0 :(得分:1)
该行将始终显示,因为它无条件地写入跟踪。请参阅CDbCommand:484。
答案 1 :(得分:0)
因为它显示查询,即使它从缓存中提取查询。这就是它的工作方式。
答案 2 :(得分:0)
您可以通过检查mysql查询日志来确认查询是否真正执行。
在mysql控制台中
mysql> SET GLOBAL general_log = 'ON';
mysql> show variables like '%general%';
你会得到这样的输出
+------------------+-----------------------------------------------------------+
| Variable_name | Value
+------------------+-----------------------------------------------------------+
| general_log | ON
| general_log_file | /Applications/XAMPP/xamppfiles/var/mysql/Mac-mini.log
+------------------+-----------------------------------------------------------+
选择终端标签并输入此命令
tail -f general_log_file name
(如:/Applications/XAMPP/xamppfiles/var/mysql/Mac-mini.log)
然后刷新应用程序中的页面。现在您可以看到在mysql中真正执行的查询是什么。