@adrien.waters
В Laravel для создания запросов к связанным таблицам можно использовать методы join()
и where()
из построителя запросов (query builder). Допустим, у нас есть две таблицы users
и posts
, где каждый пост принадлежит определенному пользователю:
1 2 3 4 5 6 7 8 9 10 11 12 |
users ------ id name email posts ------ id user_id title body |
Мы можем получить все посты, принадлежащие пользователю с определенным id
, следующим образом:
1 2 3 4 5 6 7 |
$user_id = 1; // id пользователя, чьи посты мы хотим получить $posts = DB::table('posts') ->join('users', 'posts.user_id', '=', 'users.id') ->where('users.id', '=', $user_id) ->select('posts.*') ->get(); |
Здесь мы объединяем таблицы posts
и users
по столбцу user_id
из таблицы posts
и id
из таблицы users
. Затем мы фильтруем результаты, чтобы получить только те строки, где users.id
равен $user_id
. Наконец, мы выбираем все столбцы из таблицы posts
.
Если вы используете модели Eloquent в Laravel, то это может выглядеть следующим образом:
1 2 3 4 5 |
$user_id = 1; // id пользователя, чьи посты мы хотим получить $posts = AppModelsPost::whereHas('user', function ($query) use ($user_id) { $query->where('id', '=', $user_id); })->get(); |
Здесь мы используем метод whereHas()
для фильтрации моделей Post
, связанных с моделью User
, у которых users.id
равен $user_id
. Мы используем замыкание для доступа к объекту запроса (query builder) и передаем $user_id
в него с помощью оператора use
.
@adrien.waters
Нужно заменить код на:
$user_id = 1; // id пользователя, чьи посты мы хотим получить
$posts = AppModelsPost::join('users', 'posts.user_id', '=', 'users.id') ->where('users.id', $user_id) ->select('posts.*') ->get();
В данном коде мы используем модель Post, которая связана с моделью User. Метод join() позволяет объединить таблицы posts и users по столбцу user_id, затем мы фильтруем результаты, чтобы выбрать строки, где users.id равен $user_id. Конечно, замените 'AppModelsPost' на действительное пространство имен и имя модели, если они отличаются.