Maison >base de données >tutoriel mysql >Comment joindre trois tables dans Laravel à l'aide de modèles éloquents ?

Comment joindre trois tables dans Laravel à l'aide de modèles éloquents ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-13 03:44:01879parcourir

How to Join Three Tables in Laravel Using Eloquent Models?

Joindre trois tables avec le modèle éloquent de Laravel

Dans Laravel, l'utilisation de l'ORM Eloquent facilite la récupération de données relationnelles. Considérez le scénario suivant :

Base de données Tableaux :

  • Articles :

    • id
    • titre
    • bod y
    • categories_id
    • user_id
  • Catégories :

    • id
    • category_name
  • Utilisateurs :

    • id
    • user_name
    • user_type

Objectif :

Affichage articles ainsi que leurs noms de catégorie au lieu des ID de catégorie et les noms d'utilisateur au lieu des ID d'utilisateur.

Utilisation d'une requête SQL traditionnelle :

Cela peut être réalisé à l'aide d'une requête SQL traditionnelle comme ceci :

$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();

Utiliser Eloquent Modèle :

Cependant, dans Laravel, l'utilisation de modèles Eloquent permet une approche plus rationalisée. Pour commencer, définissez les modèles :

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

Catégorie.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');
    }
}

Avec ces modèles définis, récupérer les données requises devient simple :

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

Vous pouvez ensuite accéder aux propriétés comme suit :

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

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

De plus, vous pouvez également récupérer des articles par catégorie ou utilisateur :

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

Pour plus de détails, reportez-vous à la documentation officielle de Laravel : http://laravel.com/docs/5.0/eloquent

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn