我正在将CakePHP 1.3应用程序迁移到2.4.1,虽然这个过程很痛苦,但我现在已经达到了极其奇怪的程度。
当在查看表中检索所有活动的行时(ENUM列名为activo,其中'0','1'),1表示活动而0表示未处于活动状态时,Cake正在检索的行是不活跃,0。
$testimonials = $this->Testimonial->find('all', array('conditions' => array('Testimonial.activo' => '1')));
Rows:
ID name activo
1 James 1
2 Holly 0
3 David 1
正在检索霍莉,而不是撤回大卫和詹姆斯。如果让它们全部处于非活动状态(0),它会全部获取它们,但是如果我将它们全部激活(1),它将根本不检索它们。这就好像它决定0是我正在寻找的而不是1,当我给出的条件是1时。
有关可能发生的事情的任何线索?
编辑:包括生成的SQL
SELECT `Testimonial`.`id`, `Testimonial`.`spa`, `Testimonial`.`eng`, `Testimonial`.`fre`, `Testimonial`.`ita`, `Testimonial`.`por`, `Testimonial`.`nombre`, `Testimonial`.`activo`, `Testimonial`.`created` FROM `database_dev`.`testimonials` AS `Testimonial` WHERE `Testimonial`.`activo` = 1
顺便说一下,到目前为止我发现的所有发现都发生了这种情况,在其他表中,有一个带有ENUM的激活字段,我要求的值为1或更高。
尝试了几次迭代,比如数组('1'),'...> ='=> '1','...'=>等等。
答案 0 :(得分:1)
如果activo列是ENUM,那么您应该使用字符串作为查询中使用的值。
array('Testimonial.activo' => '1'))
而不是
array('Testimonial.activo' => 1))
答案 1 :(得分:0)
将数据库中的列类型从ENUM更改为INT可解决此问题。
但这需要我在许多表中更改它们并更改值,因为INT会将当前值从0更改为1和1更改为2,这是不理想的。任何有关如何修复ENUM的建议都将受到高度赞赏并改为正确答案。
答案 2 :(得分:0)
使用它 数组('Testimonial.activo =“1”')