Programing

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

lottogame 2020. 12. 1. 07:32
반응형

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에서 관계를 설정하면 관련 정보를 쉽게 검색 할 수 있습니다.

For example, if you want to retrieve an article by using the user and category, you would need to write:

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

and you can use this like so:

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

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

In another case, you might need to retrieve all the articles within a category, or retrieve all of a specific user`s articles. You can write it like this:

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

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

You can learn more at http://laravel.com/docs/5.0/eloquent


Try:

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

참고URL : https://stackoverflow.com/questions/29165410/how-to-join-three-table-by-laravel-eloquent-model

반응형