2014-12-29 31 views
2

只是遇到我的Join查詢中的一個錯誤。Laravel加入返回奇數值

我在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

問題是您有多個列名爲useridfollowers.useridblogs.userid。現在,在這種情況下,不幸的是followers.userid被當您使用$build->userid

您可以更改僅select荷蘭國際集團想要列在你的結果返回。

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

順便說一句:*工作過,所以你可以做select('blogs.*'),如果你想

+0

我經歷了那個一秒鐘前,因爲我有同樣的想法,但似乎並沒有對它進行排序。我試圖再次縮小問題的範圍。 – Lovelock

+0

啊我想我知道爲什麼。你的數據庫中有不同的'userid'列嗎? – lukasgeiter

+0

有趣的想法。是的,我有。在博客表中,我也有一個用戶ID字段...商店存儲用戶ID。看起來像病不得不改變它,並嘗試:) – Lovelock