在cakephp中限制mysql调用相同的信息

时间:2014-03-18 14:21:31

标签: php mysql cakephp

我正在使用cakephp,但这可能适用于任何基于框架/ php的环境。

我有一个博客平台,人们可以喜欢,分享,评论等。这些喜欢,分享和评论中的每一个都有一个相关的用户,这意味着从数据库中请求同一个用户多次不同的事情,运行同样的问题:

SELECT `User`.`id`, `User`.`username`, `User`.`fullname`, `User`.`avatar`, FROM `db`.`users` AS `User` WHERE `User`.`id` = 127

除了缓存之外,有没有办法可以阻止这种情况发生?或者,对于相同的信息,MySQL对同一个呼叫进行5次或更多次并不重要吗?

由于

2 个答案:

答案 0 :(得分:1)

您可以在模型上将递归设置为-1,这将导致读取和查找最初仅从该模型获取数据,除非动态设置,但是,我更喜欢可包含的行为以减少查询。你可以在这里查看。

http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

答案 1 :(得分:1)

这是CAKE方式 - 获取许多简单查询并缓存它们。

检查您的所有$this->YourModelName->find()查询 - 可能您不使用递归或包含选项,因此当您获取评论数据时,CAKE也会采用相关模型hasMany/belongsTo关系你的模特)。你可以:

  • 使用$this->loadModel(YourModelName);即时加载模型
  • 使用$this->YourModelName->Behaviors->attach('Containable');附加选定的模型和字段
  • 设置recursive => -1仅从一个模型/表格中获取数据
  • 使用自己的join选项查询(可以是一个查询,而不是containrecursive选项)
  • 用于某些数据,例如用户数据您可以将其存储在会话中,如$this->Session->write()
  • 如果您使用Auth组件,则可以从$this->Auth->user('id')
  • 等身份验证获取
  • 总是您可以为所有模型设置$useTable = false并动态链接模型,但这不是有效/经济的方式(特别是当您需要在更长时间内管理项目时)