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



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

我在lib/Cake/Model/Datasource/Database/Mysql.php找到了以下行

if (($col === 'tinyint' && $limit == 1) || $col === 'boolean') {
        return 'boolean';
    }

评论这一行不起作用。

有人有解决这个问题的方法吗?

不要碰框架。重写相关模型的 afterFind() 方法,并将字段转换为正确的类型。

您是否需要它来阻止 Cake 将您的输入放入复选框?

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

切勿修改核心,除非您计划贡献更改。如果绝对必须覆盖 MySQL 数据源,则无需通过复制文件来修改核心

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

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

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

仅作为最后的手段执行此操作。您将负责维护自己的MySQL驱动程序副本,除非您自己修补它,否则您将不会收到它的安全性和性能更新。

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

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

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

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

如果由于某种原因您不想更改列的类型,则可以强制转换并获取所需的值,下面的代码可以作为替代方法。

仅供参考:注册 = 微小(1)

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

最新更新