laravel-向数据库插入空值

ar5n3qh5  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(443)

你好,我想插入一个空值到我的数据库,但我不知道怎么做,这是给一个错误
如何插入一个空值来输入文本,并将其设置为空数据库,因为我这样做我有一个错误,因为数据库的行没有一个值。我怎样才能做到这一点而不出错。
这是我的错误
如您所见,我有一个foreach循环,因此插入1个输入文本值不会在数据库中返回任何内容。
sqlstate[23000]:完整性约束冲突:1048列“title”不能为null(sql:insert-into) awards ( title , description , awards_image , updated_at , created_at )值(,a:0:{},2018-11-28 10:29:35,2018-11-28 10:29:35))
我的控制器

public function store(Request $request)
{
    $this->validate($request, [
        'title' => 'nullable',
        'description' => 'nullable',
        'awards_image.*' =>  'image|nullable|max:1999'
    ]);
    $awards = [];
    if ($request->has('awards_image'))
    {   
        //Handle File Upload

        foreach ($request->file('awards_image') as $key => $file)
        {
            // Get FileName
            $filenameWithExt = $file->getClientOriginalName();
            //Get just filename
            $filename = pathinfo( $filenameWithExt, PATHINFO_FILENAME);
            //Get just extension
            $extension = $file->getClientOriginalExtension();
            //Filename to Store
            $fileNameToStore = $filename.'_'.time().'.'.$extension;
            //Upload Image
            $path = $file->storeAs('public/awards_images',$fileNameToStore);
            array_push($awards, $fileNameToStore);
        }

        $fileNameToStore = serialize($awards);
    }
    else
    {
        $fileNameToStore='noimage.jpg';
    }

foreach ($awards as $key => $values) {
            $awardsContent = new Award;
            $awardsContent->title = $request->title[$key];
            $awardsContent->description = $request->description[$key];
            $awardsContent->awards_image = $values;
            $awardsContent->save();
            }

}
b91juud3

b91juud31#

进行新迁移

php artisan make:migration fix_title_in_table_awards --table=awards

然后在创建的迁移中,首先删除列,然后重新创建列使其可为null。。

Schema::table('awards', function (Blueprint $table) {
    $table->dropColum('title');
});

Schema::table('awards', function (Blueprint $table) {
    $table->string('title')->nullable();
});

请注意此操作,因为您将丢失该列中的所有数据…也许您可以将标题的实际值复制到另一列,直到您进行更改。。。

p8h8hvxi

p8h8hvxi2#

如果不想更改表,请尝试以下操作:

foreach ($awards as $key => $values) {
        $awardsContent = new Award;
        $awardsContent->title = !empty($request->title[$key]) ? $request->title[$key] : '';
        $awardsContent->description = $request->description[$key];
        $awardsContent->awards_image = $values;
        $awardsContent->save();
        }

}

更多信息请点击 empty() :
http://php.net/manual/en/function.empty.php
如果您很乐意更改表,那么可以创建一个迁移,它位于up中

Schema::table('awards', function(Blueprint $table) {

    $table->string('title')->nullable()->change();

});

当然,你必须把它改成你已经拥有的东西,但重要的是 ->nullable()->change(); 行的其余部分应该与初始迁移相同。
有关迁移更改的详细信息:
https://laravel.com/docs/5.7/migrations#modifying-列
我希望这有帮助

相关问题