Подтвердить что ты не робот

Как присоединиться к трём столам по модели laravel eloquent

У меня есть три таблицы

Таблица статей

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

Но я хочу сделать по-честному. Пожалуйста, как я мог это сделать?

4b9b3361

Ответ 1

С 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

Ответ 2

Попробуйте:

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