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
Libérer: 2024-11-13 03:44:01
original
865 Les gens l'ont consulté

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();
Copier après la connexion

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');
    }
}
Copier après la connexion

Catégorie.php:

namespace App\Models;

use Eloquent;

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

    public function articles()
    {
        return $this->hasMany('App\Models\Article');
    }
}
Copier après la connexion

User.php :

namespace App\Models;

use Eloquent;

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

    public function articles()
    {
        return $this->hasMany('App\Models\Article');
    }
}
Copier après la connexion

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

$article = \App\Models\Article::with(['user','category'])->first();
Copier après la connexion

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
Copier après la connexion

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();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal