У меня есть User
, Question
и File
модель. У каждого пользователя много вопросов и у каждого вопроса много файлов. Я определил эти отношения в этих моделях. Я хочу сохранить вопрос, содержащий несколько файлов. Я сохраняю вопрос через модель пользователя. Как хранить файлы одновременно, сохраняйте вопрос. Я пишу этот код, но выдает ошибку.
Свойство [id] не существует в этом экземпляре коллекции.
Вот User
модель:
class User extends Authenticatable
{
use HasApiTokens,Notifiable;
protected $fillable = [
'name', 'email',
'family','username','phone',
'degree','major_id','field',
'university','image','password'
];
protected $hidden = [
'remember_token',
];
public function questions(){
return $this->hasMany(Question::class,'user_id');
}
public function majors()
{
return $this->belongsTo(Major::class,'major_id');
}
}
Question
модель:
class Question extends Model
{
protected $guarded=[];
protected $table = 'questions';
public function files()
{
return $this->hasMany('App\File','question_id');
}
public function courses()
{
return $this->belongsTo(Course::class,'course_id');
}
public function users()
{
return $this->belongsTo(User::class,'user_id');
}
}
File
модель:
class file extends Model
{
protected $guarded=[];
}
это store
метод Question
:
public function store(Request $request)
{
$rules=[
'suggest_price'=>'required|numeric',
'deadline'=>'required',
'user_id'=>'required',
];
$validation= \Illuminate\Support\Facades\Validator::make($request->all(),$rules);
if($validation->failed()){
return response()->json([
'success'=>true,
'message'=>'Invalid Input Data!',
'data'=>null
],400);
}
$user=User::find($request->user_id);
if(is_null($user)){
return response()->json([
'success'=>false,
'message'=>'This user is not exist!',
'data'=>null
],404);
}
$question=$user->questions()->create([
'title'=>$request->title,
'description'=>$request->description,
'status'=>$request->status,
'suggest_price'=>$request->suggest_price,
'deadline'=>$request->deadline,
'course_id'=>$request->course_id,
]);
$user->save();
if(!is_null($request->file())){
$format=$request->file('file')->getClientOriginalExtension();
$size=$request->file('file')->getSize();
$name='questionId-'.$question->id.'-userId '.$user->id.'.'.$format;
if($size>$this->MAX_SIZE_FILE){
return response()->json([
'success'=>false,
'message'=>'size of file is grater than max-size-file!'
],400);
}
$request->file('file')->move(public_path('files'),$name);
$file=new file();
$file->link=$name;
$file->format=$format;
$file->size=$size;
$fileId=$question->files()->save($file)->id;
$file->update(['link'=>'file '.$fileId.'-'.$name,]);
$question->save();
}
return response()->json([
'success'=>true,
'message'=>'update successfully',
'data'=>$user->questions->id,
],200);
}