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

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

от adrien.waters , в категории: PHP , 7 месяцев назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от velma , 7 месяцев назад

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