#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 , что означает, что затем вы можете добавить дополнительные биты к запросу.