Mysql
 sql >> Database >  >> RDS >> Mysql

Come unire tre tavoli del modello eloquente di laravel

Con Eloquent è molto facile recuperare dati relazionali. Dai un'occhiata al seguente esempio con il tuo scenario in Laravel 5.

Abbiamo tre modelli:

  1. Articolo (appartiene a utente e categoria)

  2. Categoria (ha molti articoli)

  3. Utente (ha molti articoli)

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

È necessario comprendere la relazione del database e l'impostazione nei modelli. L'utente ha molti articoli. La categoria ha molti articoli. Gli articoli appartengono all'utente e alla categoria. Una volta impostate le relazioni in Laravel, diventa facile recuperare le relative informazioni.

Ad esempio, se vuoi recuperare un articolo utilizzando l'utente e la categoria, dovrai scrivere:

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

e puoi usarlo in questo modo:

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

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

In un altro caso, potresti dover recuperare tutti gli articoli all'interno di una categoria o recuperare tutti gli articoli di un utente specifico. Puoi scriverlo così:

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

Puoi saperne di più su http://laravel.com/docs/5.0/eloquent