问题描述
我想为我的帖子上传图片,并且帖子和帖子之间有一对一的多态关系(因为我有其他表格,他们也需要图片)
当我想在 postman
中存储图像和发送请求时,我收到此错误:
BadMethodCallException: Call to undefined method App\Models\Image::move()
这是我的邮递员:
这是我的关系:
image model
:
class Image extends Model
{
use HasFactory;
protected $fillable = [
'image'
];
public function imageable(){
return $this->morphTo();
}
}
还有我的post model
:
class Post extends Model
{
use HasFactory;
use \Conner\Tagging\Taggable;
protected $fillable = [
'user_id','category_id','title','body','study_time','likes','status','tags',];
public function image(){
return $this->morphOne(Image::class,'imageable');
}
}
以及 PostController
和 store()
方法:
public function store(Request $request )
{
$data = $request->all();
$validator = Validator::make($data,[
'user_id'=>'required','category_id'=>'required','title' => 'required|max:150|unique:posts','body' => 'required','study_time'=>'required','tags'=>'nullable|string',]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors(),'error']);
}
//separate tags
$tags = explode(",",$request->tags);
$image = new Image;
$getimage = $request->file('image');
$imageName = time().'.'.$getimage->extension();
$image->move(public_path('images'),$imageName);
$post = Post::create($data);
$post->image()->save($image);
//save tags
$post->tag($tags);
return response()->json([
"success" => true,"message" => "successfull","data" => $post
]);
}
我的错误在哪里?
解决方法
经过一个月的挑战,我终于能够解决它:}
为了使代码更好更简洁,我在图像表中添加了另一列:path
用于保存图片路径和另一列:image
然后我将 path
添加到我的可填写的 Image
模型中,并将代码编辑为:
public function store(Request $request )
{
$data = $request->all();
$validator = Validator::make($data,[
'user_id'=>'required','category_id'=>'required','title' => 'required|max:150|unique:posts','body' => 'required','study_time'=>'required','tags'=>'nullable|string',]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors(),'error']);
}
//separate tags
$tags = explode(",",$request->tags);
$image = new Image;
$getImage = $request->image
$imageName = time().'.'.$getImage->extension();
$imagePath = public_path(). '/images/posts';
$image->path = $imagePath;
$image->image = $imageName;
$getImage->move($imagePath,$imageName);
$post = Post::create($data);
$post->image()->save($getImage);
$post->tag($tags);
return response()->json([
"success" => true,"message" => "successfully","data" => $post
]);
}