SQLSTATE[22007]:在Laravel中,无效的日期时间格式:1366“column_name”不正确的整数值

17
Laravel多个数据插入错误
引用:

SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '' for column 'unit_id' at row 2 (SQL: insert into product_prices (created_at, product_id, unit_id, updated_at) values (2016-12-06 06:56:01, 27, 1,2016-12-06 06:56:01), (2016-12-06 06:56:01,27, , 2016-12-06 06:56:01))

但是我的unit_id字段具有nullable();属性,请求有人帮忙解决。这里column_name=unit_id

include your php code. - Beginner
只需粘贴您的SQL结构,我曾遇到类似的问题,我只是在数据库中将标题字段创建为int类型,我的错误。 - Rinto George
8个回答

8

null和不存在是不同的。如果你想将null设置为一个值,你需要在查询中写入它:

 ... ('2016-12-06 06:56:01',27, null, '2016-12-06 06:56:01'))

同时,日期时间格式不正确。您需要将其输入为字符串。


我尝试使用null进行插入,但它自动显示为空或空白。同样的错误SQLSTATE[22007]: 无效的日期时间格式:1366行2处的列“unit_id”的整数值不正确(SQL:insert into product_prices(created_at,product_id,unit_id,updated_at)values(2016-12-06 06:56:01,27,1,2016-12-06 06:56:01),(2016-12-06 06:56:01,27,,2016-12-06 06:56:01)) - Al-Amin
@Al-Amin,能否提供创建表的语句? - Jens
产品价格表public function up() { Schema::create('product_prices', function (Blueprint $table) { $table->increments('id'); $table->integer('product_id')->unsigned(); $table->integer('unit_id')->unsigned()->nullable(); $table->integer('price'); $table->timestamps(); $table->foreign('product_id')->references('id')->on('products')->onDelete('restrict'); $table->foreign('unit_id')->references('id')->on('units')->onDelete('restrict'); }); } - Al-Amin
感谢您的回复,很抱歉回复晚了。 - Al-Amin

5

我曾经遇到过同样的问题,原因是我的控制器中有一个愚蠢的错误。

我的做法是返回了整个对象而不是仅仅返回id,像这样:

  public function store($id, Request $request) {

    $post = Post::find($id);

    $comment = new Comment;
    $comment->text = $request->comment;
    $comment->post_id = $post; <--- HERE IS THE MISTAKE 
    $comment->post_id = $post->id; <--- HERE IS THE FIX
    $comment->user_id = Auth::id();

    $comment->save();

    return back();

  }

3

使用intval()函数可以很好地解决这个问题。

intval($unit_id);

如果以下情况成立,该代码将返回0

  • $unit_id未设置。
  • $unit_id为字符串且不是字母数字(例如:'abc')。
  • $unit_idNULL

如果$unit_id是字母数字字符串(例如:'10'),则返回其对应的数字。


1

在查询之前,如果unit_idnull/empty,请将其设置为0。例如:

if(!isset($unit_id) || empty($unit_id)) $unit_id = 0;
.
.
//insert query rest code

谢谢,这种方法我已经可以解决问题了,但这不是正确的方式,希望如果有更好的解决方案,请建议我。 - Al-Amin

1
你正在使用unit_id,它是否与units(id)有关联?你正在为一个外键引用列输入空值。使用null而不是''
 insert into product_prices (created_at, product_id, unit_id, updated_at)
  values (2016-12-06 06:56:01, 27, 1,2016-12-06 06:56:01), 
         (2016-12-06 06:56:01,27,null, 2016-12-06 06:56:01);

检查您的插入是否包含表中的所有列,或更改查询并尝试。插入到product_prices(created_at,product_id,unit_id,updated_at) 值(2016-12-06 06:56:01,27,1,2016-12-06 06:56:01); 插入到product_prices(created_at,product_id,unit_id,updated_at) 值(2016-12-06 06:56:01,27,null,2016-12-06 06:56:01); - Parithiban

0

我通过使用类似于验证器函数的方式解决了它:

function if_set($v)
    if (isset($_POST[$v]) and $_POST[$v] != '')
        $data_to_db[$v] = $_POST[$v];

0

我可以解决这个问题,请检查您发送的请求(put或post)到API时的有效载荷。

我应该发送这个JSON:

{
...,
"item":1
}

但我已经发送了这个。这是我的错误。

{
...,
"item":[{"id"=1}]
}

或者 { ..., "item":[1] }

我的 Laravel 代码是这样的:

   $item= Item::find($request->input('item'));
   $client->item()->associate($item);

0

我遇到了同样的错误。update_at和created_at是由迁移自动创建的。备份您的模型并将其删除。然后使用php artisan创建一个新模型,例如: use php artisan make:model 模型名称 -m 然后在您的迁移表中添加所需的字段,例如:

 public function up()
{
    Schema::create('flights', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('airline');
        $table->timestamps();
    });
}

然后进行迁移 php artisan migrate

如果您不想创建 updated_atcreated_at,或者说您有一个插入查询不包括这些列。只需在您的模型中编写 protected $timestamps = false; 即可。 - Mycodingproject

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接