2014-12-29 4 views
2

Join 쿼리에서 버그를 발견했습니다.Laravel Join 홀수 값 반환

나는 foreach에서 데이터를 반향 출력하고 사용자 이름을 표시합니다. 다른 페이지에서는 잘 작동하며 각 사용자 이름은 행의 ID에있는 사용자 이름과 일치합니다. 그러나 아래 예제에서 사용자 이름은 항상 로그인 한 사용자의 이름입니다.

희망 사항은 다음과 같습니다. 감사.

쿼리는 다음 페이지/집에

Route::get('following', array('before' => 'auth', function() 
{ 
    $slug = Route::getCurrentRoute()->uri(); 
    $builds = Blog::findBuilds($slug); 
    return View::make('pages/home', compact('builds'), array('pageTitle' => 'Builds You Are Following')); 
})); 

그리고 나는 그렇게 같은 데이터를 표시하고 있습니다 :

foreach ($builds as $build) 
{ 
    $usernameOfOwner = User::usernameFromID($build->userid); 
} 

$query = DB::table('blogs') 
    ->join('followers', 'blogs.id', '=', 'followers.blogid') 
    ->where('followers.userid', Auth::user()->id) 
    ->where('frontpage', '1') 
    ->latest('lastupdated'); 

이를 통해 호출한다 그러면 ... 사용자 이름을 ID에서 가져 오는 기능은 다음과 같습니다.

public static function usernameFromID($id) { 
    $user = DB::table('users')->where('id', $id)->first(); 
    return $user->username; 
} 

다른 곳에서 내 웹 사이트에 내가 가입 상단 하나가 아니라에 쿼리 비슷한을 실행 그래서 예를 들면 : 그것은 작동

$query = static::where('frontpage', '1')->latest('lastupdated'); 

, 그래서 내 유일한 생각은 괜찮 아래로 가입 자사을 그 코드의 유일한 부분입니다.

답변

3

userid이라는 열이 여러 개있는 것이 문제입니다. followers.useridblogs.userid. 이제이 경우 불행히도 followers.userid이 사용되면 반환됩니다. $build->userid

결과에서 원하는 열만 변경할 수 있습니다.이 값을 select으로 변경할 수 있습니다. 당신은 내가 같은 생각을 가지고 있었다 나는 그 두 번째 전에 겪은

+0

을하려는 경우 select('blogs.*')을 할 수 있도록도 작동하지만, 정렬 표시되지 않습니다 * : 그런데

$userid = Auth::user()->id; $query = DB::table('blogs') ->join('followers', function($q) use ($userid){ $q->on('blogs.id', '=', 'followers.blogid'); $q->where('followers.userid', '=', $userid); }) ->select('blogs.userid', 'other-column') ->where('frontpage', '1') ->latest('lastupdated'); 

. 아프다 문제를 좀더 좁히십시오. – Lovelock

+0

아, 내가 왜 그런지 알 것 같아. db에 다른'userid' 컬럼이 있습니까? – lukasgeiter

+0

흥미로운 생각. 그리고 네. 블로그 테이블에는 또한 사용자 ID 필드가 있습니다. 저장소에는 사용자 ID가 저장됩니다. 아픈 것 같아 그것을 변경하고 시도해야합니다 :) – Lovelock