One-to-one releationship
При выводе через json, родительского модель, дочерняя модель выводится как null. Дочерняя модель создаётся в базе и при попытке получить через hasOne() возвращается без проблем.
class Teacher extends Model
{
use HasFactory;
protected $table = "user_teachers";
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
}
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'surname',
'login',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'email_verified_at',
'created_at',
'updated_at',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function student(): HasOne
{
return $this->hasOne(Student::class);
}
public function teacher(): HasOne
{
return $this->hasOne(Teacher::class);
}
}
Контроллер:
$fields = $request->validate([
'name' => 'required|string',
'surname' => 'required|string',
'email' => 'required|string|unique:users,email',
'username' => 'required|string|unique:users,login',
'password' => 'min:6|required|string|confirmed'
]);
$user = User::create([
'name' => mb_ucfirst($fields['name']),
'surname' => mb_ucfirst($fields['surname']),
'email' => strtolower($fields['email']),
'login' => $fields['username'],
'password' => bcrypt($fields['password'])
]);
$this->createByType($request, $user);
$token = $user->createToken(env("APP_KEY"))->plainTextToken;
$response = [
'user' => $user,
'token' => $token
];
Версия Laravel: 9
