Как сделать выборку where id = and id = из связанной таблицы в laravel?

Пользователь

от adrien.waters , в категории: PHP , 2 года назад

Как сделать выборку where id = and id = из связанной таблицы в laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от velma , 2 года назад

@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.

Пользователь

от sherwood_littel , год назад

@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' на действительное пространство имен и имя модели, если они отличаются.