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
Freigeben: 2024-11-13 03:44:01
Original
860 Leute haben es durchsucht

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();
Nach dem Login kopieren

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');
    }
}
Nach dem Login kopieren

Category.php:

namespace App\Models;

use Eloquent;

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

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

User.php:

namespace App\Models;

use Eloquent;

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

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

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

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

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

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

// Retrieve category name
$article->category->category_name
Nach dem Login kopieren

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();
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage