在Laravel8-API中上载图像

在Laravel8-API中上载图像,laravel,api,upload,polymorphism,relation,Laravel,Api,Upload,Polymorphism,Relation,我想上传我的帖子的图片,并在帖子和帖子之间建立一对一的多态关系(因为我有其他表,它们也需要图片) 当我想在postman中存储图像并发送请求时,会出现以下错误: BadMethodCallException:调用未定义的方法App\Models\Image::move() 这是我的邮递员: 这是我的亲戚: 图像模型: class Image extends Model { use HasFactory; protected $fillable = [ 'ima

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

当我想在
postman
中存储图像并发送请求时,会出现以下错误:

BadMethodCallException:调用未定义的方法App\Models\Image::move()

这是我的邮递员:

这是我的亲戚:

图像模型

class Image extends Model
{
    use HasFactory;

    protected $fillable = [
        'image'
    ];

    public function imageable(){
        return $this->morphTo();
    }

}


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

}

和我的
post模型

class Image extends Model
{
    use HasFactory;

    protected $fillable = [
        'image'
    ];

    public function imageable(){
        return $this->morphTo();
    }

}


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

我将
路径
添加到可填充的
图像
模型中,并将代码编辑为:

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



$getImage->move(公共路径('images'),$imageName)becouse
$request->file('image')
这是一个
File::class
对象,它有
move()
函数可调用,那么如何移动它?
$getImage->move(public_path('images'),$imageName)使用此选项,现在我的问题是保存在
image
表中。。当我将其更改为您的代码并发送请求时,会出现以下错误:
illumb\Database\QueryException:SQLSTATE[HY000]:一般错误:1364字段“image”没有默认值
$post->image()->save($imageName)您也需要修复此问题