Почему то в отношениях Laravel все работает наоборот
Здравствуйте. Объясните пожалуйста почему все работает наоборот, работаю с кодом друга и заметил что все отношения в моделях наоборот как на фото. То есть через belongsTo юзер получает свое юзерИнфо, а юзерИнфо получает своего юзера через hasOne. Но ведь когда ты получаешь модель у которой внешний ключ user_id равен твоему id то ты родитель и должен использовать hasOne, разве нет? Я решил исправить его код ведь это неправильно (как считал я). И как же я удивился когда ничего не работало, но после того как я вернул все как было все начало работать. Я перечитал несколько раз документацию Лары насчет отношения belongsTo и hasOne, и никак не могу понять почему его код верен, а то что я заменил все по правилам документации не верно, ведь это юзерИнфо принадлежит Юзеру и поэтому юзер должен обращаться через hasOne и возвращать юзерИнфо с ключом user_id равным ключу id юзера. А юзерИнфо должен получать юзера через belongsTo потому что он принадлежит юзеру и он возвращает его по своему внешнему ключу user_id сравнивая его с id юзера. У меня какие то головные проблемы или что, ведь все так очевидно, но выходит все совсем наоборот нежели чем я думаю.
Ответы (2 шт):
Ваши доводы звучат логично, и думаю они верны. Но мб поля в $fillable
не совпадают с полями в самой таблице? т.е. мб в UserInfo
нет поля user_id
, зато есть поле user_info_id
в User
?
User главная сущность. в Таблице users_info должно быть поле user_id; Migration table users_info
Schema::create('users_info', function (Blueprint $table) {
$table->id();
$table->foreignIdFor(User::class);
$table->string('username');
$table->text('bio');
$table->timestamps();
});
Model UserInfo -> get User
public function user()
{
return $this->hasOne(User::class, 'id', 'user_id');
}
Model User -> get userInfo
public function userInfo()
{
return $this->belongsTo(UserInfo::class);
}
Я на всякий случай проверил, все работает корректно. Главное в таблице не забыть внешний ключ.