Laravel - 将空值插入数据库

Posted

技术标签:

【中文标题】Laravel - 将空值插入数据库【英文标题】:Laravel - Inserting Empty Value to Database 【发布时间】:2019-04-29 22:49:43 【问题描述】:

您好,我想在我的数据库中插入一个空值,但我不知道该怎么做,这是一个错误

如何插入一个空值来输入文本并将其设置为空到数据库,因为我这样做我有一个错误,因为数据库的行没有值。我怎样才能做到这一点而不会出错。

这是我的错误

如您所见,我有一个 foreach 循环,因此插入 1 个输入文本值不会在数据库中返回任何内容。

SQLSTATE[23000]:违反完整性约束:1048 列“标题” 不能为空(SQL:插入awardstitledescriptionawards_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();
            


【问题讨论】:

使您的数据库表可以为空,正如我在上一个问题中解释的那样。 如果属性没有值把空字符串像' '它允许为空。 @Gabrielle 我该怎么做?请帮助我使用该语法 thns @SagarGautam 如果没有php artisan migrate:refresh,我能做到吗? Laravel - Inserting empty to Input Form and Insert Null Value to Database的可能重复 【参考方案1】:

进行新的迁移

php artisan make:migration fix_title_in_table_awards --table=awards

然后在创建的迁移中首先删除该列,然后重新创建该列使其可以为空..

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

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

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

【讨论】:

【参考方案2】:

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

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

如果您愿意更改表,请在其中创建迁移

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

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

);

当然,您必须将其更改为您已有的内容,但重要的部分是 ->nullable()->change();,该行的其余部分应与您的初始迁移相同。

有关迁移更改的更多信息:

https://laravel.com/docs/5.7/migrations#modifying-columns

希望对你有帮助

【讨论】:

谢谢@Josh,这是很多信息。如果我需要有关此代码的帮助,我希望您能回复非常感谢您 图片@Josh 怎么样?我怎样才能让它也为空? 您可以使用与奖项图像相同的标题,只需更改代码以匹配奖项图像 我的意思是它是 $fileNameStorage .. 我认为它的方法会有所不同你不觉得先生吗? 哈哈它工作先生浪费时间只是一个错字谢谢你今天节省了我的时间

以上是关于Laravel - 将空值插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何避免将空值插入主键或非空列?

你如何将空值插入sql server

如何将空值显式插入参数化查询?

如何将null插入数据库?

如何将空日期插入访问

尝试将空数据插入 SQL 中的视图中,还有其他方式吗?