Почему то в отношениях Laravel все работает наоборот

модель юзера

Метод инфо через который можно получить юзерИнфо

Модель ЮзерИнфо которая имеет метод hasOne который работает

Здравствуйте. Объясните пожалуйста почему все работает наоборот, работаю с кодом друга и заметил что все отношения в моделях наоборот как на фото. То есть через 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?

→ Ссылка
Автор решения: mydls1

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);
    }

Я на всякий случай проверил, все работает корректно. Главное в таблице не забыть внешний ключ.

→ Ссылка