Laravel 5.7 получить текущего вошедшего в систему пользователя с профилем пользователя на один-один отношения
Я сейчас учусь Laravel 5.7
, Я скачал исходный код с GitHub. В этом коде я реализовал отношения один к одному с таблицей пользователей и профилей.
Я был в состоянии успешно войти в систему пользователя и смог зарегистрировать пользователя. Тем не менее, когда я вызываю метод getCurrentUser()
он возвращает данные только из пользовательской таблицы, а не из профиля.
User Model
class AuthController extends Controller
{
public function __construct()
{
$this->middleware('auth:api')->only('logout');
}
public function getCurrentUser(): User
{
return request()->user();
}
public function login(Request $request): JsonResponse
{
$credentials = $this->validate($request, [
'email' => 'required|email|exists:users',
'password' => 'required|min:5',
]);
if (auth()->attempt($credentials)) {
$user = auth()->user();
/** @var User $user */
$user['token'] = $this->generateTokenForUser($user);
return response()->json($user);
} else {
return response()->json(['success' => 'false', 'message' => 'Authentication failed'], 401);
}
}
}
User
class User extends Authenticatable
{
use Notifiable, HasApiTokens;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'first_name','last_name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* Encrypt the password while savinf it.
*
* @param string $password
*/
public function setPasswordAttribute(string $password)
{
$this->attributes['password'] = Hash::make($password);
}
public function User()
{
return $this->hasOne('App\UserProfile');
}
}
User Profile
class UserProfile extends Model
{
//
/**
* The following fields are mass assignable.
* @var array
*/
protected $fillable = ['first_name', 'last_name',
'middle_name', 'date_of_birth', 'nationality','phone','image','permanent_address_country',
'permanent_address_state','permanent_address_district','temp_address_district','temp_address_state','gender','user_id'];
public function UserProfile()
{
return $this->belongsTo('App\User');
}
}
Как я могу вернуть текущего зарегистрированного пользователя и данные профиля через Auth
getCurrentUser
апи?
я использую Vue.js
на моей стороне клиента.
1 ответ
В вашем User
модель, изменить User()
метод к этому:
public function userProfile()
{
return $this->hasOne('App\UserProfile');
}
И в твоем UserProfile
модель, изменить UserProfile()
метод к этому:
public function user()
{
return $this->belongsTo('App\User');
}
Тогда вы можете получить свой пользователь с его профилем с этим запросом:
User::with('userProfile')->find(Auth::id());
В вашем случае вы можете рефакторинг getCurrentUser()
метод к этому:
use Illuminate\Http\Request;
public function getCurrentUser(Request $request): User
{
return $request->user()->load('userProfile');
}