За последние 24 часа нас посетил 18951 программист и 1610 роботов. Сейчас ищут 1154 программиста ...

Отношение один к одному

Тема в разделе "Laravel", создана пользователем kull, 12 мар 2021.

  1. kull

    kull Новичок

    С нами с:
    12 мар 2021
    Сообщения:
    7
    Симпатии:
    0
    Приветствую!
    Помогите разобраться с отношением один к одному. Опишу более подробно задачу.
    По API получаю большой json файл которые после парсинга сохраняю все данные в базе, например таблица test.

    Когда юзер проходит регистрацию я сверяю данные что данный юзер есть в таблице test и делаю запись в таблицу users.
    При этом в обоих таблицах есть столбик id_u это индификатор юзера который пришел по API.

    Сейчас мне надо достать дополнительные данные из таблицы test. Для этого я использую отношение один к одному.

    В моделе User создал метод:
    Код (Text):
    1. public function test()
    2. {
    3. return $this->hasOne(UTable::class, 'id_u', 'id_u');
    4. }
    в контролере:
    Код (Text):
    1. $user = User::find($my);
    2.  
    3. dump($user);
    выводит null. Методом тыка разобрался почему выводит null.
    В $my присвоил цифру 1 и вывелись данные из таблицы users но я ожидал найти данные в другой таблице. (В таблице users записей намного меньше чем в test)
    попробовал сделать обратное отношение:

    Код (Text):
    1.  
    2. public function user()
    3. {
    4.      return $this->belongsTo(User::class, 'id_u','id_u');
    5. }
    Насколько я понимаю сейчас должны были вывести данные из таблицы users. Но я получил данные из таблицы test. Более того, в качестве параметра который передал $my он искал в столбце id , хотя я вроде указал столбец id_u

    Объясните что я не так делаю?:(
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.760
    Поставьте Laravel Debugbar, гляньте запросы, которые получаются в итог. Плюс прочитайте про жадность запросов. Лара по дефолту делает не жадные запросы, т.е. связанные модели запрашиваются только при обращении к ним ($user->test). Чтоб была жадность, надо сделать $with. Перечитайте доку по Eloquent, там всё подробно написано. Или нужен переводчик для этого?
     
  3. kull

    kull Новичок

    С нами с:
    12 мар 2021
    Сообщения:
    7
    Симпатии:
    0
    да, все разобрался! при выводе метод не добавил :D