#php #sql #laravel
Вопрос:
У меня есть много-много отношений с пользователями таблицы,элементами и элементом user_item сводной таблицы, и мне нужно вызвать запрос : Выберите * из элемента user_item, где идентификатор пользователя=$user — >идентификатор в laravel и верните результаты в формате json. Я пытаюсь с
$user=User::find(session('user_id'))->items()->get();
return response ()->json($user);
Но это не работает. Как я могу это сделать?
class User extends Authenticatable {
public function items (){
return $this->belongsToMany ("AppModelsItem", "user_item", "user", "item");
}
}
class Item extends Models {
public function users (){
return $this->belongsToMany ("AppModelsUser", "user_item", "item", "user");
}
}
Комментарии:
1. Всем привет! Не могли бы вы показать файл миграции для вашей
user_item
таблицы?
Ответ №1:
Вы можете определить столбцы в сводной таблице с помощью withpivot
метода
public function items (){
return $this->belongsToMany ("AppModelsItem", "user_item",
"user", "item")->withPivot(['column1', 'column2','another_column']);
}
чтобы получить отношение вместо использования get()
, вы должны использовать, как показано ниже:
$user=User::find(session('user_id'))->items;
return response ()->json($user);
выше будет приведен ниже результат json:
[{
"id": 4,
"name": "PC",
"pivot": {
"column1": 1,
"column2": 4,
"another_column": "2016-03-03"
}
},
{
"id": 5,
"name": "Phone",
"pivot": {
"column1": 1,
"column2": 4,
"another_column": "2016-03-03"
}
}]
вы также можете включить сводную пользовательскую модель в использование с помощью():
$user=User::with('items')->find(session('user_id'));
return response ()->json($user);
дайте результат json что-то вроде:
{
"id": 1,
"name": "User Name",
"email": "email@user.com",
"created_at": null,
"updated_at": null,
"items": [{
"id": 4,
"name": "PC",
"pivot": {
"column1": 1,
"column2": 4,
"another_column": "2016-03-03"
}
},
{
"id": 5,
"name": "Phone",
"pivot": {
"column1": 1,
"column2": 4,
"another_column": "2016-03-03"
}
}]
}]