web-dev-qa-db-fra.com

Comment rejoindre trois tables par laravel modèle éloquent

J'ai trois table

Tableau des articles

 id
 title
 body
 categories_id
 user_id

Tableau des catégories

  id
  category_name

Table utilisateur

 id
 user_name
 user_type

Je veux montrer des articles avec leur nom de catégorie au lieu de category_id et user_name au lieu de user_id J'essaie comme ces requêtes C'est un travail!

$articles =DB::table('articles')
                ->join('categories', 'articles.id', '=', 'categories.id')
                ->join('users', 'users.id', '=', 'articles.user_id')
                ->select('articles.id','articles.title','articles.body','users.username', 'category.name')
                ->get();

Mais je veux le faire de manière éloquente. S'il vous plaît, comment pourrais-je faire?

59
Nay

Avec Eloquent, il est très facile de récupérer des données relationnelles. Vérifiez l'exemple suivant avec votre scénario dans Laravel 5.

Nous avons trois modèles:

1) Article (appartient à l'utilisateur et à la catégorie)

2) Catégorie (a beaucoup d'articles)

3) utilisateur (a de nombreux articles)


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

}

2) Category.php

<?php

namespace App\Models;

use Eloquent;

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

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

}

3) User.php

<?php

namespace App\Models;
use Eloquent;

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

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

}

Vous devez comprendre votre relation avec la base de données et sa configuration dans les modèles. L'utilisateur a de nombreux articles. Catégorie a de nombreux articles. Les articles appartiennent à l'utilisateur et à la catégorie. Une fois les relations définies dans Laravel, il devient facile de récupérer les informations associées.

Par exemple, si vous souhaitez récupérer un article en utilisant l'utilisateur et la catégorie, vous devez écrire:

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

et vous pouvez l'utiliser comme ceci:

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

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

Dans un autre cas, vous devrez peut-être extraire tous les articles d’une catégorie ou extraire tous les articles d’un utilisateur spécifique. Vous pouvez l'écrire comme ceci:

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

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

Vous pouvez en apprendre davantage à l’adresse http://laravel.com/docs/5.0/eloquent

94
Anand Patel

Essayer:

$articles = DB::table('articles')
            ->select('articles.id as articles_id', ..... )
            ->join('categories', 'articles.categories_id', '=', 'categories.id')
            ->join('users', 'articles.user_id', '=', 'user.id')

            ->get();
17
Nay Zaw Oo