sql >> Databáze >  >> RDS >> Mysql

Jak spojit tři stoly podle laravelova výmluvného modelu

S Eloquent je velmi snadné získat relační data. Podívejte se na následující příklad s vaším scénářem v Laravel 5.

Máme tři modely:

  1. Článek (patří uživateli a kategorii)

  2. Kategorie (má mnoho článků)

  3. Uživatel (má mnoho článků)

  1. Článek.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');
        }
    }

Musíte porozumět vztahu k databázi a nastavení v modelech. Uživatel má mnoho článků. Kategorie obsahuje mnoho článků. Články patří uživateli a kategorii. Jakmile v Laravelu nastavíte vztahy, bude snadné získat související informace.

Pokud například chcete načíst článek pomocí uživatele a kategorie, budete muset napsat:

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

a můžete to použít takto:

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

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

V jiném případě možná budete muset načíst všechny články v rámci kategorie nebo načíst všechny články konkrétního uživatele. Můžete to napsat takto:

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

Více se můžete dozvědět na http://laravel.com/docs/5.0/eloquent



  1. Zálohujte PostgreSQL pomocí pg_dump a pg_dumpall

  2. Optimalizujte skupinový maximální dotaz

  3. Použití příkazu IF v dotazu MySQL SELECT

  4. Jak vybrat datum ze sloupce datum a čas?