2015-01-12 2 views
0

Laravel에서 제공하는 기본 인증 시스템을 사용하고 있습니다. 그러나 Auth 테이블 (사용자)에서 두 개의 테이블 (두 개의 내부 조인 수행)을 조인하려고합니다. 지금까지 두 모델 사이에 두 개의 관계를 만들었고이 모델이 제대로 작동하고 원하는 데이터를 가져 왔지만 테이블에 두 개의 조인을 수행하는 것이 훨씬 효율적이라고 생각할 때 두 가지 추가 쿼리를 수행합니다.Laravel 가입시 인증 테이블

사용자 모델에서 조인을 수행하여 새 쿼리를 만들 필요가 없지만 (Auth :: user()를 호출하여 생성 된 조인을 사용하는 방법))).

내 테이블 :

 Users: id username iconid avatarid
 Icons: id image
 Avatars: id image

그래서 내가하고 싶은 것입니다 :

 SELECT icons.image as icon_image, avatars.image as avatar_image FROM users 
    LEFT OUTER JOIN icons ON icons.id = users.iconid 
    LEFT OUTER JOIN avatars ON avatars.id = users.avatarid 

이 가능합니까? Auth :: user()가 위의 쿼리를 실행하려면 내 사용자 모델의 메서드를 덮어 씁니까?

답장을 보내 주신 모든 분들께 감사드립니다! 사용자 모델에서

답변

2

넣어이 :

$user = User::with(['icon', 'avatar'])->find(1); 

그런 다음이 같은 아이콘과 아바타에 액세스 할 수 있습니다 :

$user->icon 

$user->avatar 

public function icon() 
{ 
    return $this->hasOne('Icon'); 
} 
public function avatar() 
{ 
    return $this->hasOne('Avatar'); 
} 

는 다음과 같이 사용자를 얻을 수 조인을 사용하여 이렇게 할 수 있습니다.

$user_id = 1; 
DB::table('users') 
->join('icons', 'icons.id', '=', 'users.icon_id') 
->join('avatars', 'avatars.id', '=', 'users.avatar_id') 
->select('users.name', 'icons.path', 'avatars.path') 
->where('users.id', $user_id) 
->first(); 
+0

이것은 내가 한 것만 큼, 현재 테이블에 테이블을 결합하는 대신 두 개의 추가 쿼리를 생성합니다. 따라서 Auth :: user() -> 아이콘이 작동하지만 피하려고하는 두 개의 추가 쿼리가 생성됩니다. LEFT OUTER이 Auth 테이블에 테이블을 조인하려고합니다. User 모델 내에서 별도의 메서드를 만들 수는 있지만 Auth :: user() 호출에는 영향을 미치지 않습니다. 귀하의 답변을 주셔서 감사합니다 :) – Patchesoft

+0

어쨌든 Auth :: user() 호출을 조작하는 조인 – Rupert

+1

예제를 추가 했습니까? Auth :: user()가 SQL 코드를 실행하도록 SQL 코드를 어디에 두겠습니까? User 모델의 메소드를 덮어 써야합니까? – Patchesoft