自动不在laravel中插入created_at和updated_at不起作用

问题描述 投票:0回答:2

自动不在laravel中插入created_at和updated_at不起作用。

DB::table('commundityvendordata')->insert($commdata);

我正在使用上面的语句传递一个数组来插入多个记录$commdata工作正常,但是当检查数据库中的created_at和updated_at列时没有获取时间戳。

型号:

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class commundityvendordata extends Model
{
    use HasFactory;
    protected $table ='commundityvendordata';
}

迁移:

public function up()
    {
        Schema::create('commundityvendordata', function (Blueprint $table) {
            $table->bigIncrements('vender_id')->unsignedBigInteger();
            $table->date('new_date');
            $table->unsignedBigInteger('cd_id');
            $table->foreign('cd_id')->references('cd_id')->on('communitydata')->onDelete('cascade');
            $table->unsignedBigInteger('cn_id');
            $table->foreign('cn_id')->references('cd_id')->on('communitydata')->onDelete('cascade');
            $table->unsignedBigInteger('unit_id');
            $table->foreign('unit_id')->references('unit_id')->on('units')->onDelete('cascade');
            $table->unsignedInteger('vender1');
            $table->unsignedInteger('vender2');
            $table->unsignedInteger('vender3');
            $table->unsignedInteger('vender4');
            $table->timestamps();
        });
    }

控制器:

function commundityvendordata(Request $request){
                $collection = count(collect($request));
                $cvendordata = new commundityvendordata;
                for ($i=0; $i < $collection; $i++) {
                $new_date = Carbon::parse($request->new_date)->format('Y-m-d');
                $CCode=communitydata::where('c_code','=',$request->ccode[$i])->first();
                $cd_id = $CCode['cd_id'];
                $CName=communitydata::where('c_name','=',$request->cname[$i])->first();
                $cn_id = $CName['cd_id'];
                $CUnit=units::where('unit','=',$request->cunit[$i])->first();
                $unit_id = $CUnit['unit_id'];
                $vender1 = $request->vendor1[$i];
                $vender2 = $request->vendor2[$i];
                $vender3 = $request->vendor3[$i];
                $vender4 = $request->vendor4[$i];
                   $commdata = [
                    'new_date'  => $new_date,
                    'cd_id'     => $cd_id,
                    'cn_id'     => $cn_id,
                    'unit_id'   => $unit_id,
                    'vender1'   => $vender1,
                    'vender2'   => $vender2,
                    'vender3'   => $vender3,
                    'vender4'   => $vender4
                ];
                if($cd_id != ''){
                         DB::table('commundityvendordata')->insert($commdata);
                    }else{
                        return back()->with('success','Data Saved...');
                    } 
            }   
    }

数据库表截图:

laravel laravel-5
2个回答
3
投票
仅当您使用

created_at

 时,才会自动插入 
updated_at
Eloquent

如果您使用

DB
外观,则必须手动插入它们:

      $commdata = [
                    'new_date'  => $new_date,
                    'cd_id'     => $cd_id,
                    'cn_id'     => $cn_id,
                    'unit_id'   => $unit_id,
                    'vender1'   => $vender1,
                    'vender2'   => $vender2,
                    'vender3'   => $vender3,
                    'vender4'   => $vender4,
                    "created_at" =>  \Carbon\Carbon::now(), # new \Datetime()
                    "updated_at" => \Carbon\Carbon::now(),  # new \Datetime()
                ];

如果你想充分利用 Laravel 并且没有高级/复杂的查询,我建议你使用 Models 和 Eloquent。


1
投票

这是因为您尚未设置

created_at
updated_at
的默认值。为此,您可以遵循 2-3 个解决方案:

解决方案1

  1. 进入phpmyadmin
  2. 选择数据库表。 (就你而言,它是
    commundityvendordata
  3. 然后转到结构并设置
    created_at
    updated_at
  4. 的默认值
  5. 对于
    updated_at
    ,您可以将属性设置为更新时
    Current_Timestamp

解决方案2

在您的

commdata
数组中,只需添加
created_at
updated_at

$commdata = [
             ...
             'created_at' => date("Y-m-d h:i:s"),
             'updated_at' => date("Y-m-d h:i:s"),
             ];

解决方案3

就是要对你的Scheme做出改变”

Schema::create('commundityvendordata', function (Blueprint $table) {
          $table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
          $table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'));
        });
}
© www.soinside.com 2019 - 2024. All rights reserved.