У меня три таблицы
id title body categories_id user_id
id category_name
id user_name user_type
Я хочу показать статьи с их именем категории вместо category_id и user_name вместо user_id. Я стараюсь как этот запрос. Это работа!
$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();
Но я хочу сделать по-чертенько. Пожалуйста, как я мог это сделать?
С Eloquent очень легко получить реляционную проверку данных в следующем примере с вашим senario в Laravel 5
у нас есть три модели
1) Статья (принадлежит пользователю и категории)
2) Категория (имеет много статей)
3) Пользователь (имеет много статей)
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'); } }
Вы должны понимать, отношение и настройку базы данных в моделях. У пользователя много статей. В категории есть много статей. Статьи принадлежат пользователю и категории. Как только вы настраиваете отношения в laravel, становится легко получить связанную информацию.
Например, если вы хотите получить статью с помощью пользователя и категории, вам нужно будет написать:
$article = \App\Models\Article::with(['user','category'])->first();
и вы можете использовать это как
//retrieve user name $article->user->user_name //retrieve category name $article->category->category_name
в другом случае вам может потребоваться получить все статьи в пределах категории или получить все конкретные статьи для пользователей; вы можете написать так:
$categories = \App\Models\Category::with('articles')->get(); $users = \App\Models\Category::with('users')->get();
вы можете узнать больше на http://laravel.com/docs/5.0/eloquent
Пытаться:
$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();