【发布时间】:2018-02-15 07:00:38
【问题描述】:
我有列id_a(varchar , primary key),其值为 1 - 10。我想将该 id_a 列转换为整数,因此如果我执行查询 \App\Model\Main::max('id_a');,它返回值 10,就像我执行 SELECT MAX(CAST(id_a as integer)) FROM mains 一样。我将此代码添加到我的模型但无法正常工作(\App\Model\Main::max('id_a') 仍然返回值 9):
protected $casts = [
'id_a' => 'integer',
];
这是我模型的完整代码:
protected $table = 'tb_main';
protected $primaryKey = 'id_a';
public $incrementing = false;
protected $guarded = ['id_a'];
protected $casts = [
'id_acara' => 'integer',
];
【问题讨论】:
-
演员应该只将
'10'更改为10(字符串与整数)。如果你期待一个 10 并且得到一个 9 那么其他的事情正在发生。您的数据库中列的数据类型是什么? -
是的,如果我执行
\App\Model\Main::max('id_a')查询,它应该返回 10,因为在我在模型中添加 $casts 后 id_a 列已经返回 int 值,但我不知道为什么仍然返回 9。我的数据库中该列的数据类型是 varchar @jfadich -
列应该是
INT而不是VARCHAR。 eloquent 中的max()方法使用了 SQLMAX()函数,我怀疑它可能会以不同于整数的方式处理字符串数字。