ホームページ >データベース >mysql チュートリアル >Eloquentモデルを使用してLaravelで3つのテーブルを結合する方法?

Eloquentモデルを使用してLaravelで3つのテーブルを結合する方法?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-13 03:44:01881ブラウズ

How to Join Three Tables in Laravel Using Eloquent Models?

Laravel Eloquent モデルで 3 つのテーブルを結合する

Laravel では、Eloquent ORM を使用すると、リレーショナル データを簡単に取得できます。次のシナリオを考えてみましょう:

データベース テーブル:

  • 記事:

    • id
    • タイトル
    • 本文
    • categories_id
    • user_id
  • カテゴリ:

    • id
    • category_name
  • ユーザー:

    • id
    • user_name
    • user_type

目的:

カテゴリとともに記事を表示するカテゴリ ID の代わりに名前、ユーザー ID の代わりにユーザー名を使用します。

従来の SQL クエリの使用:

これは、次のような従来の SQL クエリを使用して実現できます。

$articles = DB::table('articles')
                ->join('categories', 'articles.categories_id', '=', 'categories.id')
                ->join('users', 'users.id', '=', 'articles.user_id')
                ->select('articles.id', 'articles.title', 'articles.body', 'users.user_name', 'categories.category_name')
                ->get();

Eloquent モデルの使用:

ただし、Laravel では、Eloquent モデルを使用すると、より合理化されたアプローチが可能になります。まず、モデルを定義します。

Article.php:

namespace App\Models;

use Eloquent;

class Article extends Eloquent
{
    protected $table = 'articles';

    public function user()
    {
        return $this->belongsTo('App\Models\User');
    }

    public function category()
    {
        return $this->belongsTo('App\Models\Category');
    }
}

Category.php:

namespace App\Models;

use Eloquent;

class Category extends Eloquent
{
    protected $table = "categories";

    public function articles()
    {
        return $this->hasMany('App\Models\Article');
    }
}

User.php:

namespace App\Models;

use Eloquent;

class User extends Eloquent
{
    protected $table = 'users';

    public function articles()
    {
        return $this->hasMany('App\Models\Article');
    }
}

これらのモデルを定義すると、必要なデータの取得が簡単になります:

$article = \App\Models\Article::with(['user','category'])->first();

その後、次のようにプロパティにアクセスできます。

// Retrieve user name
$article->user->user_name

// Retrieve category name
$article->category->category_name

さらに、カテゴリまたはユーザーごとに記事を取得することもできます:

$categories = \App\Models\Category::with('articles')->get();
$users = \App\Models\User::with('articles')->get();

詳細については、Laravel の公式ドキュメントを参照してください: http://laravel.com/ docs/5.0/eloquent

以上がEloquentモデルを使用してLaravelで3つのテーブルを結合する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。