在 Laravel 8 中上传图片 - API

问题描述

我想为我的帖子上传图片,并且帖子和帖子之间有一对一的多态关系(因为我有其他表格,他们也需要图片

当我想在 postman 中存储图像和发送请求时,我收到此错误

BadMethodCallException: Call to undefined method App\Models\Image::move()

这是我的邮递员:

enter image description here

这是我的关系:

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');
    }

}

以及 PostControllerstore() 方法

    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
        ]);
    }