2013-08-13 2 views
1

나는 이런 식으로 뭔가 쓸 수 : 시도 DB 쿼리 빌더Eloquent에서 두 개의 쿼리 대신 INNER JOIN을 사용하여 관계를 쿼리 할 수 ​​있습니까?

SELECT 
    post.*, 
    author.* 
FROM post 
    INNER JOIN author 
    ON author.id = post.author_id 
WHERE post.id = ? 
+0

그래서 관계'$ this-> belongsTo를 ('저자')'는 두 개의'Select' 쿼리를 생성합니다. 그리고 게시물과 함께 동일한 SQL 쿼리에서 작성자 정보를 얻고 싶습니다. – mikatakana

답변

0

를 사용

$post = Post::join(['author'])->find($postId); 
$authorName = $post->author->name; 

은 내부에서만 하나를 선택 생산에 참여 (2 개 번 선택) 및없이를

Post::join('author',function($join){ 
    $join->on('author.id','=','post.author_id'); 
})->where('post.id','=',$postId)->select('post.*','author.*'); 
+2

두 개의 열이 같은 이름을 공유하면 병합된다는 것을 알리기 만하면됩니다. 이를 피하기 위해 select 절에는 해당 열의 별칭이 포함되어야합니다. –

3

join 방법을 사용하여 Eloquent에서 할 수 있습니다.

$post = Post::join('author', function($join) 
    { 
     $join->on('author.id', '=', 'post.author_id'); 
    }) 
    ->where('post.id', '=', $postId) 
    ->select('post.*', 'author.*') 
    ->first(); 

6,는 $post의 결과가 자신의 속성이 이 경우 열이을 병합 할 것 같은 이름을 가진 결과 집합에 해당 할 대상을 져야합니다. 사용할 때 이런 일이 :

->select('post.*', 'author.*') 

, 당신은 select 절에서 그 열에 별칭을 작성해야이 문제를 방지하려면 아래와 같이

->select('post.id AS post_id', 'author.id AS author_id') 
관련 문제