2014-03-07 20 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; 

我不知道这是你问什么但是这要给你与由用户所拥有的所有问题的实例。