/**
* The attributes that are mass assignable.
*
* @var array
*/protected$fillable=['referrer_id','name','email','password',];/**
* A user has a referrer.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/publicfunctionreferrer(){return$this->belongsTo(User::class,'referrer_id','id');}/**
* A user has many referrals.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/publicfunctionreferrals(){return$this->hasMany(User::class,'referrer_id','id');}
protected$fillable=[// ...'username',];/**
* The accessors to append to the model's array form.
*
* @var array
*/protected$appends=['referral_link'];/**
* Get the user's referral link.
*
* @return string
*/publicfunctiongetReferralLinkAttribute(){return$this->referral_link=route('register',['ref'=>$this->username]);}
我们没有将用户的引荐链接存储在数据库中,而是使用访问器来计算它。然后,我们将该属性附加到 User 模型的数组或 JSON 格式中。要了解更多关于访问器和 Eloquent 序列化的信息,请点击这里和这里。
/**
* Show the application registration form.
*
* @return \Illuminate\Http\Response
*/publicfunctionshowRegistrationForm(Request$request){if($request->has('ref')){session(['referrer'=>$request->query('ref')]);}returnview('auth.register');}/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/protectedfunctionvalidator(array$data){returnValidator::make($data,['name'=>['required','string','max:255'],'username'=>['required','string','unique:users','alpha_dash','min:3','max:30'],'email'=>['required','string','email','max:255','unique:users'],'password'=>['required','string','min:8','confirmed'],]);}/**
* Create a new user instance after a valid registration.
*
* @param array $data
*
* @return \App\Models\User
*/protectedfunctioncreate(array$data){$referrer=User::whereUsername(session()->pull('referrer'))->first();returnUser::create(['name'=>$data['name'],'username'=>$data['username'],'email'=>$data['email'],'referrer_id'=>$referrer?$referrer->id:null,'password'=>Hash::make($data['password']),]);}
/**
* The user has been registered.
*
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return mixed
*/protectedfunctionregistered(Request$request,$user){if($user->referrer!==null){Notification::send($user->referrer,newReferrerBonus($user));}returnredirect($this->redirectPath());}