Выберите * из сводной таблицы в laravel

#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"
        }
    }]
}]