尝试将cakephp作为tinyint(1)
而不是int
返回bool
。我不想为小选择框更改我的整个数据库,只是为了适应CakePHP。
我在lib/Cake/Model/Datasource/Database/Mysql.php
if (($col === 'tinyint' && $limit == 1) || $col === 'boolean') {
return 'boolean';
}
评论此行不起作用。
任何人都有解决此问题的方法吗?
答案 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;");