【发布时间】:2014-11-09 19:32:51
【问题描述】:
我以这种方式清理了我的一个控制器中的一些功能:
旧功能:
return $this->find()
->where(['id' => $id])
->first();
新:
return $this->get($id);
哪个更快,哪个更受欢迎?
【问题讨论】:
标签: cakephp query-builder cakephp-3.0
我以这种方式清理了我的一个控制器中的一些功能:
旧功能:
return $this->find()
->where(['id' => $id])
->first();
新:
return $this->get($id);
哪个更快,哪个更受欢迎?
【问题讨论】:
标签: cakephp query-builder cakephp-3.0
在性能方面应该几乎没有区别,只需查看源代码和/或简单地对其进行测试。在1000 迭代中,我可以看到0.0001 秒的差异,这无需担心。
一旦the primary key and the alias 被“缓存”(默认情况下应该在表类为instantiated 和烘焙时分别为initialized 时发生),构建查询所需的额外处理应该是绝对最少的。
那时,几乎唯一的区别应该是get() 更短,而throws an exception 则在找不到记录时更短。
另请参阅http://book.cakephp.org/3.0/en/orm/table-objects.html#loading-entities
【讨论】:
get(),期望它存在并准确搜索(例如,编辑表单,查看 ctp),否则使用 find()。就是这么简单(如果你仔细想想,也可以解释一下)。