Сделайте это, если вы хотите написать повторно используемый код и использовать его по-другому
например, у нас есть модель Post и Image в модели Image, добавьте этот код
public function post()
{
return $this->belongsTo(Post::class);
}
public static function named($name,$type)
{
$photo = new static;
$photo->saveAs($name,$type);
return $photo;
}
public function saveAs($name,$type)
{
$this->path = sprintf("%s/%s/%s-%s",'baseDir',$type,time(), $name);
$this->name = sprintf("%s-%s", time(), $name);
$this->type = $type;
}
public function moves(UploadedFile $file,$type)
{
$file->move($this->baseDir.'/'.$type, $this->name);
return $this;
}
и в модельчто вы хотите добавить изображение для этого как сообщение:
public function images()
{
return $this->hasMany(Image::class);
}
public function addImages(Image $image)
{
return $this->images()->save($image);
}
и в контроллерах:
public function addImages(ImageRequest $request,$id)
{
$image = $this->makeImage($request->file('file'),$request->type);
Post::where('id' ,'=', $id)->first()->addImage($image);
return back();
}
protected function makeImage(UploadedFile $file,$type)
{
return Image::named($file->getClientOriginalName(),$type)->moves($file,$type);
}