在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)代码>您也需要修复此问题