sql >> Base de Datos >  >> RDS >> Mysql

Cómo unir tres mesas por laravel modelo elocuente

Con Eloquent es muy fácil recuperar datos relacionales. Mira el siguiente ejemplo con tu escenario en Laravel 5.

Disponemos de tres modelos:

  1. Artículo (pertenece a usuario y categoría)

  2. Categoría (tiene muchos artículos)

  3. Usuario (tiene muchos artículos)

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

Debe comprender la relación y la configuración de su base de datos en los modelos. El usuario tiene muchos artículos. La categoría tiene muchos artículos. Los artículos pertenecen al usuario y la categoría. Una vez que configura las relaciones en Laravel, se vuelve fácil recuperar la información relacionada.

Por ejemplo, si desea recuperar un artículo utilizando el usuario y la categoría, deberá escribir:

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

y puedes usar esto así:

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

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

En otro caso, es posible que necesite recuperar todos los artículos dentro de una categoría o recuperar todos los artículos de un usuario específico. Puedes escribirlo así:

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

Puede obtener más información en http://laravel.com/docs/5.0/eloquent