试图制作蛋糕以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;");