Я пытаюсь получить модель пользователя с отношениями и вложенными полями. Эта первая попытка работает нормально:

$user = \App\User::where('id', auth()->user()->id)->with(['userdoc'])->get();

Возвращает весь объект userdoc. Но я хочу только два поля, поэтому я пытаюсь:

$user = \App\User::where('id', auth()->user()->id)->with(['userdoc:id,number'])->get();

И таким образом он возвращает userdoc:null в toArray() JSON.

Похоже, это нормально в соответствии с документацией по адресу https://laravel.com/ Docs / 5.5 / красноречивое - отношения # нетерпеливого заряжание

Я на Laravel 5.6.

Добавляем дополнительную информацию:

Без определенных полей получает весь объект

$user = \App\User::where('id', auth()->user()->id)->with('userdoc')->get();
return response()->json($user->toArray(), 200);

[
    {
        "id": 11,
        "email": "xxxxx",
        "slug": "xxxxx",
        "created_at": "xxxxx",
        "updated_at": "xxxxx",
        "deleted_at": null,
        "first_name": "xxxxx",
        "last_name": "xxxxx",
        "is_verified": 0,
        "userdoc": {
            "id": 11,
            "created_at": "2018-08-20 13:20:29",
            "updated_at": "2018-08-20 13:20:29",
            "deleted_at": null,
            "user_id": 11,
            "type": "document",
            "number": "xxxxxxxxx"
        }
    }
]

Определение полей userdoc делает объект нулевым

$user = \App\User::where('id', auth()->user()->id)->with('userdoc:id,number')->get();
return response()->json($user->toArray(), 200);

[
    {
        "id": 11,
        "email": "xxxxxxxxxxx",
        "slug": "xxxxxxxxxxx",
        "created_at": "xxxxxxxxxxx",
        "updated_at": "xxxxxxxxxxx",
        "deleted_at": null,
        "first_name": "xxxxxxxxxxx",
        "last_name": "xxxxxxxxxxx",
        "is_verified": 0,
        "userdoc": null
    }
]
1
anderlaini 20 Авг 2018 в 20:05

4 ответа

Лучший ответ

В результате вы не выбрали связанный первичный ключ user_id. Попробуй это

$user = \App\User::where('id', auth()->user()->id)->with(['userdoc:id,user_id,number'])->get();
3
Davit 20 Авг 2018 в 17:13

Вам необходимо удалить квадратные скобки [] в:

$user = \App\User::where('id', auth()->user()->id)->with(['userdoc:id,number'])->get();
_________________________________________________________^___________________^

Должно быть :

$user = \App\User::where('id', auth()->user()->id)->with('userdoc:id,number')->get();

Вы также должны передать внешний ключ в with переданных полях:

...->with('userdoc:id, user_id, number')
2
Zakaria Acharki 20 Авг 2018 в 17:18

Я предполагаю, что ваша таблица userdocs имеет свойство user_id, и вы используете отношение один ко многим между users и userdocs. Если это так, вам также нужно извлечь внешний ключ из userdoc:

$user = \App\User::where('id', auth()->id())->with(['userdoc:id,number,user_id'])->get();

2
matpb 20 Авг 2018 в 17:17

Я должен был добавить идентификатор к моей вложенной нетерпеливой загрузке, чтобы получить имя моего клиента:

$foo = Visitor_visit::with('client:id,name')->get();

В противном случае это было нулевым, надеюсь, что это помогает кому-то.

1
Taranis 8 Май 2020 в 11:51
51935498