スライドショー

【PHP/Laravel】1対多のHasmanyの基本的な使い方をマスターしよう!

こんにちは!エンジニアのオータケです!

みなさんはモデルでデータを取得する際に複雑な形で取得したい場合がありますよね?

例えば、ブログのようなWebアプリケーションを作る際に特定の投稿者が書いた記事一覧を取得したい場合はどのようにすればよいでしょうか?

そこで今回は

[基礎] リレーションとは何か
[基礎] 1対多の関係のデータを取得するにはどうするべきか?
[実践] 条件を付けたり並び替えて情報を取得しよう

について解説していきます。

ぜひご覧ください!

リレーションとは?

IT用語辞典には次のような記載があります。

リレーションとは、関係モデルにおいて、データを関連付けている属性の集合のことである。 関係データベースの考案者であるエドガー・コッド(Codd)によって提唱された「コッドの12の法則」(Codd's 12 Rules)に登場する概念で、今日の関係データベースに多大な影響を与えている基礎的概念のひとつとなっている。

ちょっとよくわからないですよね?

簡単に言えば同じような関係性のモデル(テーブル)とモデル(テーブル)を連携して扱うことだと理解していただけるとわかりやすいのではないかと思います。

例えば、冒頭のブログの件を画像で表すと次のような形になります。

投稿者に対して記事が複数結びつく関係、つまりこれを「1対多」の関係といいます。

この記事では、投稿者のデータを引っ張ってくると記事A,B,Cも一緒に引っ張ってくることができます。

次の章ではこの1対多でデータを取る方法を書いていきます!

1対多のHasManyを使ってみよう

ではまず、コードを見てみましょう。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Writer extends Model
{
  public function posts()
  {
    return $this->hasMany('App\Post');
  }
}

これはモデルのコードになります。

コントローラでpostsメソッドを呼び出すことで投稿者のデータだけでなく記事データも同時に取得することができます。

では実際に使う方法を見てみましょう。

function hoge()
{
  $posts = Writer::find(1)->posts();
}

このようにpostsを呼び出すことでforeachなどといった命令と組み合わせて使うことができます。

HasManyを使って条件(where)で取得データを絞ろう

次にwhereメソッドを使って取得してくるデータに条件を付加して条件に該当するデータだけ引っ張ってくるようにしましょう。

function hoge()
{
  $posts = Writer::find(1)
                     ->posts()
                     ->where('title', 'like', '%Laravel%')
                     ->get();
}

先程作ったpostsメソッドのあとにwhereメソッドを呼び出し条件を指定した上でgetメソッドを呼んでいます。

今回の場合は記事タイトルにLaravelが含まれている記事だけ抽出するというプログラムです。

HasManyの結果を並び替えよう(orderBy)

最後にソートする方法です。

これも従来のモデルを使った方法と変わりません。

function hoge()
{
  $posts = Writer::find(1)
                     ->posts()
                     ->latest()
                     ->get();
}

この場合はlatestメソッドを使って降順に並べています。

oldestメソッドを使えば昇順に並び替えることができます。

もちろん、whereとこの並び替えを組み合わせて使うこともできます。

まとめ

いかがでしょうか?

今回は1対多の基本的な解説を行いました。

実際にはもっと複雑なHasManyもありますが、今回は基本編ということで解説をしてきました。

HasManyのようなリレーション機能を使うことは実践の場でよくあります。

必ず覚えておきたいですね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

オータケ

オータケ

30歳、フリーランスプログラマ。中学の頃よりプログラミングに興味を持ちゲーム開発やWebサイト構築などを経験
新しいフレームワークやライブラリに興味があり革新的な機能が含まれていると泣いて喜ぶ。