おーしまブログ

プログラミングやってます

【PHP】whereInを使ってサブクエリする

こんにちは、おーしまです。

今回は、whereInを使ってサブクエリしていきたいと思います。



今回は3つのテーブルがあり

usersテーブル(多) → (一)articlesテーブル(多) → (一)commentsテーブル

のような関係性があるとします。


また、articlesテーブルには、user_id
commentsテーブルには、article_id
の外部キーがあります。


この時、「ユーザーの投稿した記事のコメントを全て取得したい」として
user_idのみ与えられたとします。


今までなら、

<?php

$user = User::find($user_id);
$comments = [];
foreach($user->articles as $article) {
    foreach($new->comments as $comment){
        array_push($comments, $comment)
    }
}

?>

とやっていましたが、


whereInを使うと、、、

<?php

$select = Comment::select();
$select
    ->whereIn('article_id', function ($query) use ($user_id) {
    $query->from('articles')
        ->select('id')
        ->where('user_id','=',$user_id)
});

?>

で取り出すことができました。
こうすることで処理の数が少なくなり、優れています。


whereInで、テーブルを超えてidが一致するものだけ取得できるので、、
今回で言うと、commentsテーブルのarticle_idとidが一致するものを選び、
articlesテーブルのuser_idと最初に与えられた$user_idが一致するものを取ってきています。





今回はここまでです。
それでは、また。

ここはどこ おれはだれ それに近いものがあんだよ 始めようとした奴らも迷い始めてる 怖がらせないでよ そりゃ甘くはないけど まだまだ 夢見ていい世界なんでしょ {UVERwould「ハイ!問題作」}