我一直在尝试更新相册中的照片,但我做对了。我知道我需要获取要更新的照片的专辑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');
}
我们将不胜感激
答案 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);
因此请确保也进行更新
希望这会有所帮助