我正在设置一个项目,我想在其中使用CakePHP's Translate Behavior。
在我达到10个我希望翻译的字段之前,一切似乎都能正常工作。 Translate Behavior为它试图检索的每个字段创建一个INNER JOIN - 我相信这是导致此错误的原因(仅在10 +时发生):
SQLSTATE [42000]:语法错误或访问冲突:1104 SELECT 会检查超过MAX_JOIN_SIZE行;检查你的WHERE并使用 SET SQL_BIG_SELECTS = 1或SET MAX_JOIN_SIZE =#如果SELECT没问题
两个问题:
1)我尝试通过运行两个列出的SQL命令来修复它,但仍然没有运气 - 我怎样才能让它工作?
2)如果要为每个字段创建一个INNER JOIN,是否理想/确定/可接受10-20 +翻译字段?我应该重新考虑使用这种行为,也许我自己创造一些东西吗?
答案 0 :(得分:1)
您是否在https://stackoverflow.com/a/950576/182823
上尝试了SET OPTION SQL_BIG_SELECTS = 1
次
答案 1 :(得分:1)
1: 它是一个mysql安全选项,你可以覆盖。在app控制器中进行过滤之前使用此代码可以避免此错误。
function beforeFilter() {
$this->{$this->modelClass}->query('SET SQL_BIG_SELECTS=1');
...
}
2: 加入表可以加倍,但有些建议:
始终使用索引!没有表格单元索引,查询可能会很慢
如果你在很多表中有很多可翻译的数据元素,请使用分离的表进行翻译,就好像你有内容和帖子一样使用Content_I18n和Post_I18n http://book.cakephp.org/2.0/en/core-libraries/behaviors/translate.html - >多种翻译模式
您可以覆盖翻译行为。我正在使用SmoothTranslate行为 http://bakery.cakephp.org/articles/sky_l3ppard/2010/01/05/smoothtranslate-to-make-smooth-translations 我认为使用Translate行为或扩展它的最好方法是,不要写自己的,它在CakePhp中足够好。在Cake 3中它会更好。(我希望)