Я пытаюсь получить модель пользователя с отношениями и вложенными полями. Эта первая попытка работает нормально:
$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
}
]
4 ответа
В результате вы не выбрали связанный первичный ключ user_id
. Попробуй это
$user = \App\User::where('id', auth()->user()->id)->with(['userdoc:id,user_id,number'])->get();
Вам необходимо удалить квадратные скобки []
в:
$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')
Я предполагаю, что ваша таблица userdocs
имеет свойство user_id
, и вы используете отношение один ко многим между users
и userdocs
. Если это так, вам также нужно извлечь внешний ключ из userdoc
:
$user = \App\User::where('id', auth()->id())->with(['userdoc:id,number,user_id'])->get();
Я должен был добавить идентификатор к моей вложенной нетерпеливой загрузке, чтобы получить имя моего клиента:
$foo = Visitor_visit::with('client:id,name')->get();
В противном случае это было нулевым, надеюсь, что это помогает кому-то.
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.