如何用拉拉威尔雄辩的模型联接三表


How to join three table by laravel eloquent model

我有三个表

文章表

 id
 title
 body
 categories_id
 user_id

类别表

  id
  category_name

用户表

 id
 user_name
 user_type

我想用类别名称而不是category_id和user_name而不是user_id来显示文章我试着像这些查询一样工作!

$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();

但我想用Eloquent的方式。求你了,我该怎么办?

使用Eloquent可以很容易地检索关系数据。看看下面的例子和你在Laravel 5中的场景。

我们有三种型号:

  1. 文章(属于用户和类别)

  2. 类别(有许多文章)

  3. 用户(有很多文章)


  1. 文章.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');
        }
    }
  1. Category.php
    <?php
    namespace App'Models;
    
    use Eloquent;
    
    class Category extends Eloquent {
        protected $table = "categories";
    
        public function articles() {
            return $this->hasMany('App'Models'Article');
        }
    }
  1. 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

尝试:

$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();
$articles =DB::table('articles')
                ->join('categories','articles.id', '=', 'categories.id')
                ->join('user', 'articles.user_id', '=', 'user.id')
                ->select('articles.id','articles.title','articles.body','user.user_name', 'categories.category_name')
                ->get();
return view('myarticlesview',['articles'=>$articles]);