Heim >Datenbank >MySQL-Tutorial >Wie verbinde ich drei Tische in Laravel mithilfe eloquenter Modelle?

Wie verbinde ich drei Tische in Laravel mithilfe eloquenter Modelle?

Linda Hamilton
Linda HamiltonOriginal
2024-11-13 03:44:01859Durchsuche

How to Join Three Tables in Laravel Using Eloquent Models?

Drei Tabellen mit dem Laravel Eloquent Model verbinden

In Laravel erleichtert die Verwendung des Eloquent ORM das Abrufen relationaler Daten. Stellen Sie sich das folgende Szenario vor:

Datenbank Tabellen:

  • Artikel:

    • id
    • title
    • bod y
    • categories_id
    • user_id
  • Kategorien:

    • id
    • category_name
  • Benutzer:

    • id
    • Benutzername
    • Benutzertyp

Ziel:

Anzeige Artikel zusammen mit ihren Kategorienamen anstelle von Kategorie-IDs und Benutzernamen anstelle von Benutzer-IDs.

Verwendung einer herkömmlichen SQL-Abfrage:

Dies kann mithilfe einer herkömmlichen SQL-Abfrage erreicht werden so:

$articles = DB::table('articles')
                ->join('categories', 'articles.categories_id', '=', 'categories.id')
                ->join('users', 'users.id', '=', 'articles.user_id')
                ->select('articles.id', 'articles.title', 'articles.body', 'users.user_name', 'categories.category_name')
                ->get();

Eloquent verwenden Modell:

In Laravel ermöglicht die Verwendung von Eloquent-Modellen jedoch einen effizienteren Ansatz. Definieren Sie zunächst die Modelle:

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

Category.php:

namespace App\Models;

use Eloquent;

class Category extends Eloquent
{
    protected $table = "categories";

    public function articles()
    {
        return $this->hasMany('App\Models\Article');
    }
}

User.php:

namespace App\Models;

use Eloquent;

class User extends Eloquent
{
    protected $table = 'users';

    public function articles()
    {
        return $this->hasMany('App\Models\Article');
    }
}

Mit diesen definierten Modellen, Das Abrufen der erforderlichen Daten wird zum Kinderspiel:

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

Sie können dann wie folgt auf die Eigenschaften zugreifen:

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

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

Zusätzlich können Sie Artikel auch nach Kategorie oder Benutzer abrufen:

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

Weitere Details finden Sie in der offiziellen Laravel-Dokumentation: http://laravel.com/docs/5.0/eloquent

Das obige ist der detaillierte Inhalt vonWie verbinde ich drei Tische in Laravel mithilfe eloquenter Modelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn