在 laravel 8 - API 中上传图片

upload image in laravel 8 - API

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

当我想发送请求并将图像存储在数据库中时,出现此错误:

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

我正在创建一个 API 所以 :

我的邮递员:

我的亲戚:

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


我的错误在哪里?

经过一个月的挑战,我终于能够解决它了:}

为了让代码更好更简洁,我在图像中添加了另一列 table : 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
        ]);
    }