使用带有TranslateBehavior的10+个字段(导致10个以上的内连接)会返回SQL错误

时间:2013-09-11 21:04:19

标签: mysql cakephp inner-join translate cakephp-2.4

我正在设置一个项目,我想在其中使用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 +翻译字段?我应该重新考虑使用这种行为,也许我自己创造一些东西吗?

2 个答案:

答案 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: 加入表可以加倍,但有些建议: