2014-03-07 32 views
0

我試圖根據類別獲得問題作者爲Y的所有問題。Laravel,在Eloquent語法後應用後跟

這是我正在嘗試這樣做:

QuestionCategory::with('questions')->where('questions.source', '=', $userId)->get(); 

的問題是,它並沒有在那裏適用於questions表,但question_categories之一。

柱未發現:(:SELECT * FROM question_categories其中 questionssource = 2 SQL)

任何想法,我在 '其中 條款' 1054未知列 'questions.source'失蹤?

+0

閱讀文檔tbh。雄辯的網頁提供了你所需要的所有信息。確保您定義模型上的關係,並添加閉包以擴展關係的查詢,如下面的一些示例中所述。 – Oddman

回答

1

問題表急於加載在單獨的查詢中,所以您的where語句無法訪問問題表。

您必須加入才能查詢。

QuestionCategory::with('questions') 
    ->join('questions', 'question_id', '=', 'questions.id') 
    ->where('questions.source', '=', $userId) 
    ->get(); 
+0

但是...爲什麼' - >連接('questions','question_id','=','questions.id')'?我不明白 – Alex

+0

是的,它看起來有點笨拙。但是,如果加載器工作正常,它將加載查詢「SELECT * FROM question_categories」,然後它將針對前一條語句返回的每個ID運行單獨的查詢「SELECT * FROM questions WHERE id IN(..,..,)」 。 因此,本質上,您的原始查詢是「SELECT * FROM question_categories WHERE questions.source = $ userId」。 連接並不理想,但目前我認爲還沒有更好的方法。 – beech

1

如果您希望根據關係進行限制,則必須以不同的方式構造代碼。這應該爲你工作...

QuestionCategory::with(array('questions' => function($q) use ($userID) 
{ 
    $q->where('source', '=', $userID); 
}))->get(); 

請注意,雖然,這並不限制QuestionCategory,因爲他們都將仍然會抓住。如果QuestionCategory沒有與該用戶ID相關聯的來源,它仍將獲取該QuestionCategory

如果您只想要具有該用戶標識的源的QuestionCategories,則可以使用whereHas()函數。

$categories = QuestionCategory::whereHas('permissions', function($q) 
{ 
    $q->where('name', '=', 'CreateUser'); 

})->get(); 
1

可能是你應該看到laravel的關係系統。 在你的模型中,你可以指定兩個表之間的關係。

Class User Extends Eloquent { 
    public function questions() 
    { 
     return $this->hasMany('Your Model Question name', 'userid column name in questions table', 'userid column name in users table') 
    }  
} 

然後訪問該關係

$user = User::find('tape an userid'); 
$questionsByUser = $user->questions; 

我不知道這是你問什麼但是這要給你與由用戶所擁有的所有問題的實例。