Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como juntar três tabelas pelo modelo eloquente laravel


Com o Eloquent é muito fácil recuperar dados relacionais. Confira o exemplo a seguir com seu cenário no Laravel 5.

Temos três modelos:

  1. Artigo (pertence ao usuário e categoria)

  2. Categoria (tem muitos artigos)

  3. Usuário (tem muitos artigos)
  1. Artigo.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. Categoria.php
    <?php
    namespace App\Models;
    
    use Eloquent;
    
    class Category extends Eloquent {
        protected $table = "categories";
    
        public function articles() {
            return $this->hasMany('App\Models\Article');
        }
    }
  1. Usuário.php
    <?php
    namespace App\Models;
    use Eloquent;
    
    class User extends Eloquent {
        protected $table = 'users';
    
        public function articles() {
            return $this->hasMany('App\Models\Article');
        }
    }

Você precisa entender sua relação de banco de dados e configurar em modelos. O usuário tem muitos artigos. A categoria tem muitos artigos. Os artigos pertencem ao usuário e à categoria. Depois de configurar os relacionamentos no Laravel, fica fácil recuperar as informações relacionadas.

Por exemplo, se você quiser recuperar um artigo usando o usuário e a categoria, precisará escrever:
$article = \App\Models\Article::with(['user','category'])->first();

e você pode usar isso assim:
//retrieve user name 
$article->user->user_name  

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

Em outro caso, talvez seja necessário recuperar todos os artigos de uma categoria ou todos os artigos de um usuário específico. Você pode escrever assim:
$categories = \App\Models\Category::with('articles')->get();
$users = \App\Models\Category::with('users')->get();

Você pode saber mais em http://laravel.com/docs/5.0/eloquent