【问题标题】:Unable to submit binary image into database in laravel无法将二进制图像提交到laravel中的数据库
【发布时间】:2017-12-05 07:24:06
【问题描述】:

我正在尝试将图像提交到数据库中,但我不断收到此错误:Type error: Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() must be an instance of Illuminate\Database\Eloquent\Model, null given, called in C:\xampp\htdocs\Evaluation\app\Http\Controllers\ImageController.php on line 24.

我检查了 StackOverflow 中的其他问题,大多数情况下他们说这是保存部分的错,他们在其中放置了类似 $post 的内容,但我已经检查过,没有任何问题。这段关系似乎也没有任何问题,但为什么它仍然不起作用?当我上传图片时,该错误也会返回 null。 null 在这里的部分返回,$UserImage = $request->input('UserImage'); 那么我的问题可能出在image1.blade.php 上吗?

图像控制器:

public function test(personal_info $user){ 
    return view('image1',compact('user'));
}

public function test1(Request $request){
    $UserImage = new Image;
    $personal_info = new personal_info;
    $UserImage = $request->input('UserImage');
    $id = $request->user_id;
    $id = personal_info::find($id);
    $id->Images()->save($UserImage);
       return redirect('/summary');
    }

image1.blade.php(我提交表单的地方)

 <form class="form-horizontal" method="post" action="{{ url('/Upload')}}" enctype="multipart/form-data">

                        {{  csrf_field()  }}
<input type="hidden" name="user_id" value="{{$user->id}}">

<div class="form-group">
    <label for="imageInput" class="control-label col-sm-3">Upload Image</label>
            <div class="col-sm-9">
                <input type="file" name="UserImage">

        </div>
    </div>

 <div class="form-group">
            <div class="col-md-6-offset-2" style="padding-left: 30px">
              <input type="submit" class="btn btn-primary" value="Save">
            </div>
          </div>
          </form>

Image.php:

public function personal_infos() {
    return $this->belongsTo('App\personal_info', 'user_id', 'id');
}

personal_info.php:

public function Images() {
    return $this->hasOne('App\Image','user_id');
}

【问题讨论】:

  • 为什么你认为上传的文件是 Eloquent 模型?
  • 我需要图像有一个 id(类似于用户个人资料图片)为什么我使用 eloquent,我已经在模型中定义了关系,正如您在我刚刚更新的问题中看到的那样
  • 但是为什么你认为来自请求的输入应该是一个文件是一个 Eloquent 模型?当您将其传递给 save 时,您将其视为一个,因为 save 需要一个模型。
  • 那我该怎么办?我已经做这样的事情有一段时间了,但从来没有遇到过这种错误。对不起,我的口才不太好,因为我很少用它
  • 首先,将图像保存到数据库是愚蠢的......你知道服务文件意味着什么吗?你的网络服务器不是你的数据库......你需要停止你正在做的事情并开始弄清楚所有这些变量实际上是什么

标签: php laravel input


【解决方案1】:
public function test1(Request $request)
{
    // make new instance of Image Model
    $imageModel = new Image;
    // find personal_info Model by id
    $personal_info = personal_info::findOrFail($request->input('user_id'));

    // UploadedFile
    $image = $request->file('UserImage');

    // get the file contents?
    $imageModel->content = ...

    // save the relationships, pass a model instance to `save`
    $personal_info->Images()->save($imageModel);

    return redirect('/summary');
}

【讨论】:

  • 所以我猜这不是最好的方法?由于数据库不用于存储图像
  • 我更愿意看到这些写入磁盘,但这有点取决于你的需求是我的朋友 :)
  • 哦,我知道实际上我已经可以将图像存储在磁盘内部,而在数据库内部它是文件的名称和大小,但是因为我正在使用另一个从数据库获取数据的软件我做不到那种方法。但无论如何,非常感谢你的:)
  • 是的...既然您需要将实际内容放入数据库中,那么您应该这样做:)
  • 但无论如何感谢您的帮助,已经尝试了 2 天:)
猜你喜欢
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
相关资源
最近更新 更多