ホームページ >データベース >mysql チュートリアル >Eloquentモデルを使用してLaravelで3つのテーブルを結合する方法?
Laravel では、Eloquent ORM を使用すると、リレーショナル データを簡単に取得できます。次のシナリオを考えてみましょう:
データベース テーブル:
記事:
カテゴリ:
ユーザー:
目的:
カテゴリとともに記事を表示するカテゴリ 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 サイトの他の関連記事を参照してください。