Как хранить чили хаммани-отношения через своего родителя в laravel? - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть 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);
}
...