1

我使用TranslateBehavior两个字段:

  • 姓名
  • 蛞蝓

我从模型中删除这些字段,因为字段的内容将保存在i18n table. 它工作得很好,但有时在我使用的应用程序中$this->Model->hasField('name'),当我从模型表中删除字段之后,这个函数总是返回 false。有什么解决办法吗?

4

1 回答 1

2

虚拟场

翻译行为使用虚拟字段,例如,如果您查询hasField存在的字段- 它会正确返回 false,因为该字段实际上不存在。

hasField + Translate 行为永远不会“起作用”

翻译行为在查询前按需创建虚拟字段定义,并在查询后销毁它们。因此,您不能只使用hasField 的第二个参数,因为除非您设法在翻译行为的beforeFindafterFind方法之间调用它,否则结果将始终为 false:

$willAlwaysBeFalse = $this->hasField('name', true);

备择方案

您可以选择以下几件事:

  • 覆盖 hasField 以便它为这些几乎虚拟的翻译字段返回 true
  • 为翻译的字段定义一个虚拟虚拟字段,以便第二个 arg ofhasField确实允许您获得肯定的响应
  • 不要删除未使用的翻译字段 - 所以hasField总是返回 true

最简单的解决方案是不删除该字段。这也将确保,虽然数据可能是空白的,但如果禁用翻译行为或存在某种错误,您的模型仍然可以工作。

于 2013-01-27T15:56:54.420 回答