【问题标题】:Eloquent: Inserts 0.00 instead of the actual float valueEloquent:插入 0.00 而不是实际的浮点值
【发布时间】:2018-12-17 03:12:31
【问题描述】:

我的表中有一个名为 hoursWorked 的字段:

$table->float('HoursWorked',2,2);

在 MySQL 中:

+-------------------+-------------+------+-----+---------+-------+
| Field             | Type        | Null | Key | Default | Extra |
+-------------------+-------------+------+-----+---------+-------+
| HoursWorked       | double(2,2) | NO   |     | NULL    |       |

在我的模型中,我在 $casts 数组中指定了这个字段是 double(2,2):

protected $casts = [
        'hoursWorked' => "double(2,2)"
];

并且该字段被标记为可填充
我正在传递具有以下格式的 JSON 对象:

...Some data
 "hoursWorked":"6.55",
...Some data

我稍后将其转换为数组并将其传递给模型的 ::create 方法。然而,插入后(没有任何错误发生)存储在数据库中的数据为 0.00。我尝试删除号码周围的" ",但没有成功。任何想法我可以如何进行。

编辑: 这是查询运行的代码:

$m = \App\Models\Timesheet::class;
foreach($request->json()->get('timesheets') as $timesheet){
    $validator = Validator::make($timesheet, $m::$rules, ['required' => trans("errors.required_field")]);
    if ($validator->fails()) {
        break;
    }else{
         $m::create($timesheet);
    }
}

【问题讨论】:

  • 运行的查询在哪里?我们能看到吗?
  • 我在答案中添加了这些信息
  • 我还是没有看到查询?
  • 查询是什么意思。我还没有为此编写任何 SQL。 Eloquent 负责查询
  • 我解决了这个问题。问题是可填充数组中的一个类型。

标签: php mysql laravel eloquent lumen


【解决方案1】:

Eloquent 模型默认防止批量赋值。使用 create 方法时,eloquent 不会为受保护的属性赋值。

你可以使用$guarded属性

protected $guarded = [];

$fillable\App\Models\Timesheet 模型的属性

protected $fillable = ['HoursWorked'];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多