[php] Laravel eloquent 모델로 3 개의 테이블을 결합하는 방법

테이블이 세 개 있어요

기사 테이블

 id
 title
 body
 categories_id
 user_id

카테고리 테이블

  id
  category_name

사용자 테이블

 id
 user_name
 user_type

category_id 대신 카테고리 이름으로 기사를 표시하고 user_id 대신 user_name으로 기사를 표시하고 싶습니다.이 쿼리처럼 시도해 보았습니다.

$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 방식으로하고 싶습니다. 제발, 어떻게해야합니까?



답변

Eloquent를 사용하면 관계형 데이터를 매우 쉽게 검색 할 수 있습니다. 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();


답변

$articles =DB::table('articles')
                ->join('categories','articles.id', '=', 'categories.id')
                ->join('user', 'articles.user_id', '=', 'user.id')
                ->select('articles.id','articles.title','articles.body','user.user_name', 'categories.category_name')
                ->get();
return view('myarticlesview',['articles'=>$articles]);


답변