cakephp3.x——如果查询';实际上不需要什么?
在CakePHP 3.x的(令人难以置信的困惑)文档中,它给出了以下内容: 您可以使用迭代器和调用方法来修饰查询,而无需触及数据库。如果缓存了视图的一部分,并且实际上不需要从数据库中获取结果,这将非常有用:cakephp3.x——如果查询';实际上不需要什么?,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,在CakePHP 3.x的(令人难以置信的困惑)文档中,它给出了以下内容: 您可以使用迭代器和调用方法来修饰查询,而无需触及数据库。如果缓存了视图的一部分,并且实际上不需要从数据库中获取结果,这将非常有用: 如果“实际上不需要从数据库中获取结果”,那么为什么要使用上面的代码?您必须了解,在嵌入该代码的上下文中,整个部分都是关于“在表上调用find将不会立即返回结果,而是返回查询对象”,以及在什么情况下这可能是有用的 查询对象不会自动生成和运行SQL,它们仅在显式调用特定方法(如toArray()
如果“实际上不需要从数据库中获取结果”,那么为什么要使用上面的代码?您必须了解,在嵌入该代码的上下文中,整个部分都是关于“在表上调用
find
将不会立即返回结果,而是返回查询对象”,以及在什么情况下这可能是有用的
查询对象不会自动生成和运行SQL,它们仅在显式调用特定方法(如toArray()
、all()
、收集方法等)或迭代对象时才会自动生成和运行SQL
这里描述的情况是,当最终执行查询对象的代码部分(即正在构造和运行的实际SQL查询)已被缓存(例如视图模板)时,因此在后续请求中再次运行查询将毫无意义,只会产生不必要的开销,因为您已经有了缓存的结果
另见
// No queries made in this example!
$results = $articles->find()
->order(['title' => 'DESC'])
->formatResults(function (\Cake\Collection\CollectionInterface $results) {
return $results->extract('title');
});