sql >> Databasteknik >  >> RDS >> Mysql

Hur man sammanfogar tre bord av laravel vältalig modell

Med Eloquent är det mycket enkelt att hämta relationsdata. Kolla in följande exempel med ditt scenario i Laravel 5.

Vi har tre modeller:

  1. Artikel (tillhör användare och kategori)

  2. Kategori (har många artiklar)

  3. Användare (har många artiklar)

  1. Artikel.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');
        }
    }

Du måste förstå din databasrelation och inställningar i modeller. Användaren har många artiklar. Kategorien har många artiklar. Artiklar tillhör användare och kategori. När du väl har ställt in relationerna i Laravel blir det lätt att hämta relaterade information.

Om du till exempel vill hämta en artikel genom att använda användaren och kategorin, måste du skriva:

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

och du kan använda detta så här:

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

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

I ett annat fall kan du behöva hämta alla artiklar inom en kategori eller hämta alla en specifik användares artiklar. Du kan skriva det så här:

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

Du kan lära dig mer på http://laravel.com/docs/5.0/eloquent



  1. STRING_SPLIT() i SQL Server 2016:Uppföljning #1

  2. Vad är JDBC-motsvarigheten till Postgres \connect-kommando?

  3. Naturlig sortering i MySQL

  4. Postgres användare existerar inte?