Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment joindre trois tables par modèle éloquent laravel

Avec Eloquent, il est très facile de récupérer des données relationnelles. Découvrez l'exemple suivant avec votre scénario dans Laravel 5.

Nous avons trois modèles :

  1. Article (appartient à l'utilisateur et à la catégorie)

  2. Catégorie (contient de nombreux articles)

  3. Utilisateur (a de nombreux articles)

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

Vous devez comprendre votre relation de base de données et la configuration dans les modèles. L'utilisateur a de nombreux articles. La catégorie compte de nombreux articles. Les articles appartiennent à l'utilisateur et à la catégorie. Une fois que vous avez configuré les relations dans Laravel, il devient facile de récupérer les informations associées.

Par exemple, si vous souhaitez récupérer un article en utilisant l'utilisateur et la catégorie, vous devrez écrire :

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

et vous pouvez l'utiliser comme ceci :

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

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

Dans un autre cas, vous devrez peut-être récupérer tous les articles d'une catégorie ou récupérer tous les articles d'un utilisateur spécifique. Vous pouvez l'écrire comme ceci :

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

Vous pouvez en savoir plus sur http://laravel.com/docs/5.0/eloquent