web-dev-qa-db-ja.com

laravel雄弁なモデルで3つのテーブルを結合する方法

私は3つのテーブルがあります

記事一覧

 id
 title
 body
 categories_id
 user_id

カテゴリー表

  id
  category_name

ユーザー表

 id
 user_name
 user_type

Category_idの代わりにcategory_id、user_idの代わりにuser_nameで記事を表示したいこれらのクエリのようにしよう

$articles =DB::table('articles')
                ->join('categories', 'articles.id', '=', 'categories.id')
                ->join('users', 'users.id', '=', 'articles.user_id')
                ->select('articles.id','articles.title','articles.body','users.username', 'category.name')
                ->get();

しかし、私は雄弁な方法でやりたいです。どうすればいいですか?

55
Nay

Eloquentを使用すると、リレーショナルデータを非常に簡単に取得できます。 Laravel 5のシナリオで次の例をチェックアウトします。

次の3つのモデルがあります。

1)記事(ユーザーとカテゴリに属する​​)

2)カテゴリ(多くの記事があります)

3)ユーザー(多くの記事があります)


1)Article.php

<?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');
    }

}

2)Category.php

<?php

namespace App\Models;

use Eloquent;

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

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

}

3)User.php

<?php

namespace App\Models;
use Eloquent;

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

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

}

データベースの関係とモデルの設定を理解する必要があります。ユーザーには多くの記事があります。カテゴリには多くの記事があります。記事はユーザーとカテゴリーに属します。 Laravelで関係をセットアップすると、関連情報を簡単に取得できるようになります。

たとえば、ユーザーとカテゴリを使用して記事を取得するには、次のように記述する必要があります。

$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\Category::with('users')->get();

詳細については http://laravel.com/docs/5.0/eloquent をご覧ください。

90
Anand Patel

試してください:

$articles = DB::table('articles')
            ->select('articles.id as articles_id', ..... )
            ->join('categories', 'articles.categories_id', '=', 'categories.id')
            ->join('users', 'articles.user_id', '=', 'user.id')

            ->get();
16
Nay Zaw Oo