테이블이 세 개 있어요
기사 테이블
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]);