Как получить проект, который принадлежит конкретному пользователю

#laravel

#laravel

Вопрос:

База данных

у меня есть 3 таблицы users, posts и post_user

 users table     projects table      project_user table
---------       ---------           --------------------
id | name       id | name           project_id | user_id
---------       ---------           --------------------
1  | user1      1  | pr1            1      |    1
2  | user2      2  | pr2            2      |    1
---------       3  | Pr3            3      |    2
                ---------          --------------------
 

Модели

Модель пользователя


 public function projects(){
    return $this->belongsToMany(Project::class);
}
 

Модель проекта


 public function users(){
    return $this->belongsToMany(User::class);
}
 

Проект написан laravel 8.x
Теперь в контроллере и посмотрите, как получить все проекты, которые принадлежат определенному идентификатору пользователя.
все, что мне нужно, это отобразить проекты вошедшего в систему пользователя с помощью laravel.

Комментарии:

1. Пожалуйста, покажите нам, что вы пробовали до сих пор

Ответ №1:

 $projects = AppUser::find(5)->projects;
 

Это позволит получить все проекты для пользователя с идентификатором 5.

Вам, конечно, нужно импортировать класс, например AppUser::find, или иметь use AppUser в верхней части PHP-файла.

Для большей ясности в том, что происходит:

  • User::find(5) — возвращает пользователя с идентификатором 5 (или любым другим вашим полем первичного ключа)
  • ->projects это волшебный метод, который вернет все результаты для отношения, определенного в методе projects() пользовательского класса.
  • Если бы мы сделали ->projects() (вместо ->projects ), мы бы вместо этого получили объект Query Builder для отношения, к которому мы могли бы привязать больше аргументов запроса (например, ->where() или ->limit(x) и т. Д.) И, Наконец, могли бы вызвать ->get() , чтобы вернуть результаты (коллекцию) запроса.

Комментарии:

1. Это предполагает, что вы правильно настроили свою базу данных со сводной таблицей.

2. Извините, но как я могу ограничить это только 10 строками

3. Извините, но как я могу ограничить это только 10 строками $projects = App User::find(5)->projects; @benjaminhull

4. Да, просто сделайте -> projects()-> limit(5)-> get(). Использование -> projects немедленно вызывает запрос и возвращает результаты для всех связанных элементов. С помощью -> projects() получает экземпляр query builder , что означает, что затем вы можете добавить дополнительные биты к запросу.