J'ai trois table
id
title
body
categories_id
user_id
id
category_name
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?
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
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();