【问题标题】:SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: 'column_name' in LaravelSQLSTATE [22007]:无效的日期时间格式:1366 不正确的整数值:Laravel 中的“column_name”
【发布时间】:2016-12-06 07:09:33
【问题描述】:

Laravel 多数据插入错误

SQLSTATE[22007]: 无效的日期时间格式: 1366 不正确的整数值: '' 列 'unit_id' 在第 2 行 (SQL: 插入到product_prices (created_at, product_id, unit_id, @987654325 @) 值 (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))

但我在nullable(); 中的unit_id 字段 请有人帮助我 这里column_name=unit_id

【问题讨论】:

  • 包括你的 php 代码。
  • 粘贴你的SQL结构,我也遇到了类似的问题,我只是在db中创建了标题字段为int,我的错

标签: php mysql laravel laravel-5 pivot-table


【解决方案1】:

null 与不存在不同。如果要将 null 设置为值,则必须将其写入查询中:

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

日期时间格式也是错误的。您必须将其作为字符串输入。

【讨论】:

  • 我尝试使用 null 插入,但它会自动查看空白或空相同的错误 SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '' for column 'unit_id' at row 2 (SQL : 插入 product_prices (created_at, product_id, unit_id, updated_at) 值 (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 能否提供表格创建语句
  • 产品价格表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'); }); }
  • 感谢回复,抱歉为时已晚
【解决方案2】:

刚刚遇到了同样的问题,在我的情况下,这是我的控制器中的一个愚蠢的错误。

我所做的是返回整个对象,而不仅仅是 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】:

    在查询之前为unit_id设置0,如果它null/empty。见例子:

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

    【讨论】:

    • 谢谢,这样我已经可以解决问题了,但这不是正确的方法,希望如果没有更好的解决方案,请建议我
    【解决方案4】:

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

    intval($unit_id);
    

    此代码将返回 0 如果:

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

    如果$unit_id 是字母数字字符串(例如'10'),它将返回数字。

    【讨论】:

      【解决方案5】:

      您正在使用 unit_id 是否用单位 (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);
      【解决方案6】:

      我遇到了同样的错误。 update_at 和 created_at 由迁移自动创建。备份您的模型并将其删除。然后使用 php artisan 创建一个新模型 采用 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工匠迁移

      【讨论】:

      • 如果您不想创建updated_atcreated_at,或者假设您有一个不包含这些列的插入查询。只需在你的模型中写上protected $timestamps = false; 就可以了。
      【解决方案7】:

      我可以解决它,在发送请求时检查您的有效负载或发布到您的 api

      我应该发送这个 json:

      {
      ...,
      "item":1
      }
      

      但我发送了这个。这是我的错

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

      或 { ..., “项目”:[1] }

      我在 laravel 中的代码是这样的:

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

      【讨论】:

        【解决方案8】:

        在我的情况下,它通过在 insert() 函数中使用验证器来解决 将您的帖子名称传递给此

        函数 if_set($v) if (isset($_POST[$v]) 和 $_POST[$v] != '') $data_to_db[$v] = $_POST[$v];

        【讨论】:

          猜你喜欢
          • 2021-02-14
          • 2021-07-23
          • 2021-04-21
          • 2021-08-22
          • 2017-11-04
          • 1970-01-01
          • 2021-05-25
          • 1970-01-01
          • 2017-12-10
          相关资源
          最近更新 更多