0

试图让 cakephp 返回tinyint(1)asint而不是 as bool。我不想为小的选择框更改我的整个数据库,只是为了让它适合 CakePHP。

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

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

评论这条线没有用。

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

4

6 回答 6

2

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

于 2012-09-19T14:50:32.987 回答
1

你需要这个来阻止 Cake 将你的输入输入到复选框中吗?

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

于 2012-09-19T14:52:37.650 回答
0

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

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

进入

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

并对副本进行更改。Cake 会自动使用你提供的这个副本,而不是核心中的副本。

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

于 2012-09-19T22:33:04.013 回答
0

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

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

于 2013-08-08T03:29:10.197 回答
0

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

ALTER TABLE `your_table_name` MODIFY `your_column_name` TINYINT(3);
于 2015-04-26T17:22:11.527 回答
0

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

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

$this->MODEL_NAME->query("SELECT id,CAST(registered AS SIGNED) as registered FROM users where id = 11223344;");
于 2021-04-15T09:27:35.803 回答