相册照片laravel画廊。更新相册中的照片时出错

时间:2019-10-10 11:29:50

标签: php laravel

我一直在尝试更新相册中的照片,但我做对了。我知道我需要获取要更新的照片的专辑ID,但我无法为请求获取正确的逻辑。

这是我每次请求更新时都会得到的错误

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'album_id' cannot be null (SQL: update `photos` set `album_id` = , `photo` = IMG-20190527-WA0001_1570703623.jpg, `size` = 275807, `updated_at` = 2019-10-10 10:33:44 where `id` = 197)

该应用程序的照片模型如下所示

class Photos extends Model
{
    protected $fillable = array('album_id', 'description', 'photo', 'title', 'size');

    public function album(){
    return $this->belongsTo('App\Album');
}
}

这是我在photosController中尝试更新逻辑的方法。我尝试要求提供专辑ID,但似乎不起作用

public function edit($id){
    $photo = Photos::find($id);
    return view('photos/edit')->with('photo', $photo);
}

public function update(Request $request, $id){
    $this->validate($request, [
        'photo' => 'required | max:15000'
    ]);


    $path = [];


            //get filename with extension
            $filenameWithExt = $request->file('photo')->getClientOriginalName();

            //get just filename
            $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);

            //get extension
            $extension = $request->file('photo')->getClientOriginalExtension();

            //create new file name
            $filenameToStore = $filename.'_'.time().'.'.$extension;

            //get file size
            $filesize = $request->file('photo')->getClientSize();

            $path = $request->file('photo')->storeAs('public/photos'.$request->input('album_id'), $filenameToStore);   

            $photo = Photos::find($id);
            $photo->album_id = $request->input('album_id');
            $photo->size = $filesize;
            $photo->photo = $filenameToStore;
            $photo->save();

    return $path;
}

每次我返回要更新的照片的路径时,照片都没有ID。仅在我忽略保存方法时发生

public/photos//IMG-20190527-WA0001_1570706571.jpg

照片编辑php查看代码

{!!Form::open(['action' => ['PhotosController@update', $photo->id], 'method' => 'POST', 'enctype' => 'multipart/form-data'])!!}
        {{Form::file('photo')}}
        {{Form::hidden('_method','PUT')}}  
        {{Form::submit('submit')}}
    {!! Form::close() !!}

照片表格的数据库模型

 public function up()
{
    Schema::create('photos', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('album_id');
        $table->string('photo');
        $table->string('size');
        $table->timestamps();
    });
}


public function down()
{
    Schema::dropIfExists('photos');
}

我们将不胜感激

1 个答案:

答案 0 :(得分:0)

错误在这一行

$photo->album_id = $request->input('album_id');

您的表单中没有名称为album_id的输入

您可以创建一个隐藏的对象并为其指定值

{!!Form::open(['action' => ['PhotosController@update', $photo->id], 'method' => 'POST', 'enctype' => 'multipart/form-data'])!!}
{{Form::file('photo')}}
{{Form::hidden('_method','PUT')}}
{{-- Here --}}
{{Form::hidden('album_id', $photo->album->id)}}
{{Form::submit('submit')}}
{!! Form::close() !!}

或者通过这样的关系获得它

$photo->album_id = $photo->album->id;
  

请注意,您还在此处使用该null | empty值

$path = $request->file('photo')
 ->storeAs('public/photos'.$request->input('album_id'), $filenameToStore);   

因此请确保也进行更新

希望这会有所帮助