0

我正在将一个 CakePHP 1.3 应用程序迁移到 2.4.1,虽然这个过程很痛苦,但我现在遇到了一些非常奇怪的事情。

在进行查找以在 Testimonials 表中检索所有活动的行时(ENUM 列称为 '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

正在检索 Holly,而不是检索 David 和 James。如果使它们全部处于非活动状态(0),它将全部获取,但如果我使它们全部处于活动状态(1),则它根本不检索。当我给出的条件是 1 时,就好像它决定了 0 是我正在寻找的而不是 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 或更高。

为查找尝试了几次迭代,例如 array('1')、'... >=' => '1'、'...' => 1 等。

4

3 回答 3

1

如果激活列是 ENUM,您应该使用字符串作为您在查询中使用的值。

array('Testimonial.activo' => '1'))

代替

array('Testimonial.activo' => 1))
于 2013-09-27T12:21:55.587 回答
0

使用这个数组('Testimonial.activo = "1"')

于 2013-10-03T10:59:54.477 回答
0

将 DB 中的列类型从 ENUM 更改为 INT 可以解决此问题。

但这将需要我在许多表中更改它们并更改值,因为 INT 会将当前值从 0 更改为 1 和从 1 更改为 2,这并不理想。任何有关如何修复 ENUM 的建议都将不胜感激,并将其更改为正确答案。

于 2013-09-29T09:21:15.367 回答