【问题标题】:LARAVEL: Trying to insert Optional Value 'Image' to ServerLARAVEL:尝试将可选值“图像”插入服务器
【发布时间】:2017-12-14 14:18:12
【问题描述】:

我对 Laravel 很陌生,并且正在创建一个社交媒体网站作为实践,用户可以像 facebook 一样更新他们的状态,但问题是并非每个帖子都应该附有图片。

所以当我发送没有图片的帖子时,它会给我这个错误:

SQLSTATE[23000]:完整性约束违规:1048 列“图像”不能为空(SQL:插入storiesbodyimageuser_idupdated_atcreated_at)值(My anme os Ololade, , 2, 2017-12-14 14:00:08, 2017-12-14 14:00:08))

这表明图像没有价值。但是,我更新了迁移文件并使图像可以为空,如下所示: $table->binary('image')->nullable(); 它可以工作,并且图像上传成为可选的,但是在检查我的 sql 数据库时,每当我上传图像时,我都看不到 blob 文件,因为图像列下的所有值都是空的。

请问有没有办法覆盖 laravel 给我的这个错误?也就是说:如果没有图像,它应该继续更新状态,或者如果我可以通过我的控制器验证不需要图像数据。

这是我的代码:

public function up()
    {
        Schema::create('stories', function (Blueprint $table) {
            $table->increments('id');

            $table->text('body');
            $table->binary('image')->
            $table->integer('user_id');
            $table->timestamps();

        });
    }

//Migrations file




    public function createStory(Request $request){
            $image  = $request['image'];
            $story = new Story();
            $story->body = $request['body'];
            $story->image = $image;
            $request->user()->stories()->save($story);
            return response()->json(['message' => 'Your Story has been posted']);
        }

    //The Function that creates a post

【问题讨论】:

  • 在执行查询之前需要先添加条件来检查图片是否为空。

标签: php sql laravel laravel-5.4


【解决方案1】:

在 laravel 中获取请求图片文件,然后你会像下面这样编写代码。

$image = $request->file("image");

【讨论】:

    【解决方案2】:

    我认为没有 $image($request['image'])。 等没有POST变量图像。

    您可以在故事表中设置允许为空的图像字段,如下所示。

    更改表story更改imageimage BLOB NULL;

    【讨论】:

      【解决方案3】:

      当您没有从表单传递图像但每次都在查询中执行时,会出现列“图像”不能为空的问题。

      为解决此问题,您可以允许数据库中的图像为 NULL,或者您必须使用 $request->hasFile 添加条件以仅在图像如下所示时插入:

              $image  = $request['image'];
              $story = new Story();
              $story->body = $request['body'];
              if($request->hasFile('image')){
                  $story->image = $image;
              }
              $story->save();
      

      【讨论】:

      • 不客气。如果有帮助,请接受我的回答。
      • 很遗憾,我的信誉等级很低。我无法将您的答案标记为正确的
      • 即使您的声誉很低,您也可以标记它。要将答案标记为已接受,请单击答案旁边的复选标记以将其从灰色切换为已填充。i.stack.imgur.com/uqJeW.png
      • 您甚至可以为任何答案投票,因为您的声誉并没有那么低。此外,当您接受任何答案时,您将获得 2 分。
      【解决方案4】:

      您的image 列不断获取空值的原因应该是这一行:

      $image = $request['image'];
      

      您的$request['image'] 返回什么?它是一个字符串吗?还是文件?如果是后者,您应该复制该文件并将其存储在某处,然后将path 保存到您的image 列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-02
        • 2017-07-31
        • 2018-12-07
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        • 1970-01-01
        • 2021-05-08
        相关资源
        最近更新 更多