【问题标题】:CakePHP beforeFind conditions [closed]CakePHP beforeFind 条件[关闭]
【发布时间】:2012-01-20 08:31:29
【问题描述】:

我正在寻找一些非常直观的东西。

有几个带有数据的模型,每条记录都有一个status 字段。因此,如果管理员我需要查看状态为“1”和“0”的所有记录,但对于前端,我需要设置一些全局 beforeFind,它只会找到 status=1 的数据

还有一些模型hasMany 和其他belongsTo 所以这些数据也应该过滤到前端,只显示status=1 的数据

【问题讨论】:

  • 一些代码将帮助我们...您使用什么查询来显示前面的记录?你试过给出条件吗?
  • 一些控制器使用简单的find,其他的paginate,所以需要一些东西。当然,如果我在findpaginate 中设置条件,我会得到所需的结果,但如果是hasMany 模型,即使 status=0 我也会得到这些结果

标签: php cakephp activerecord cakephp-model


【解决方案1】:

您可以通过在模型的 beforeFind 回调中添加一条规则来轻松做到这一点,该规则将 'status' => 1 添加到条件中,除非 'status' 已设置。因此,您可以随时覆盖条件,但默认为1

您应该明确说明这些内容,而不是依赖魔术回调行为。最好的方法是在模型中创建一个方法,如findPublicItems,它将条件添加到条件数组中。在您只想显示status = 1 项目的所有控制器方法中,显式调用此方法。在管理界面中,使用常规的 find 方法做任何你想做的事情。

【讨论】:

  • 有没有办法让模型检查是否是管理员?
  • 从技术上讲,答案是是的,但这确实是错误的做法。该模型不应该关心。照顾不是模特的工作。模型只是获取数据,决定获取哪些数据是控制器的工作。因此,您可以在模型中准备某些方法,以便轻松获取正确的数据,但不要让模型决定它返回哪些数据。
  • 适用于当前模型数据,但这不会过滤hasMany。另外如何在控制器中全局设置conditions => status(例如在 befereFilter 中?)我可以在其中检查是否是管理员
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多