强制CakePHP将tinyint作为int而不是bool返回

时间:2012-09-19 13:26:05

标签: php cakephp

尝试将cakephp作为tinyint(1)而不是int返回bool。我不想为小选择框更改我的整个数据库,只是为了适应CakePHP。

我在lib/Cake/Model/Datasource/Database/Mysql.php

找到了以下行
if (($col === 'tinyint' && $limit == 1) || $col === 'boolean') {
        return 'boolean';
    }

评论此行不起作用。

任何人都有解决此问题的方法吗?

6 个答案:

答案 0 :(得分:2)

请勿触摸框架。覆盖相关模型的afterFind()方法并将字段转换为正确的类型。

答案 1 :(得分:1)

您是否需要这样才能阻止Cake将您的输入复制到复选框中?

只需array('type'=>'text')

input()

答案 2 :(得分:0)

除非您计划提供更改,否则永远不要修改核心。如果您必须覆盖MySQL数据源,则可以通过复制文件来修改核心

来自

/lib/Cake/Model/Datasource/Database/Mysql.php

进入

/app/Model/Datasource/Database/Mysql.php 

并对副本进行更改。 Cake会自动使用您提供的副本,而不是核心内容。

仅作为最后的手段。您将负责维护自己的MySQL驱动程序副本,除非您自己进行修补,否则您将无法获得安全性和性能更新。

答案 3 :(得分:0)

您无需在Cake中更改任何内容。只需更新MySQL表,并将列类型从'tinyint'更改为'int'。它将以相同的方式存储在MySQL中,并且Cake将自动知道返回int值,而不是boolean(true / false)。

请记住在更新MySQL数据库后删除模型缓存文件,以防应用程序仍在缓存中读取。

答案 4 :(得分:0)

如果将列长度更改为大于1的值,则CakePHP将以字符串而不是布尔值的形式返回列。 TINYINT最多可以包含3个字符,因此您可以在保持TINYINT格式的同时在表上运行以下查询:

ALTER TABLE `your_table_name` MODIFY `your_column_name` TINYINT(3);

答案 5 :(得分:0)

如果由于某种原因您不想更改列的类型,那么您可以 cast 并获得所需的值,以下代码可以作为替代。

仅供参考:注册 = tinyint(1)

$this->MODEL_NAME->query("SELECT id,CAST(registered AS SIGNED) as registered FROM users where id = 11223344;");