我在$qids
中有一个数组
[{"qid":1},{"qid":2},{"qid":3},{"qid":4}]
,现在,我希望从数据库中获取与这些qid
值匹配的行。我正在研究我的Laravel项目,我正在使用的where子句如下
$questions = Question::where(function($q) use ($qids){
foreach($qids as $key => $value){
$q->where($key, '=', $value);
}
})->get();
这给了我一个错误
*SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'where clause' (SQL: select * from `questions` where (`0` = {"qid":1} and `1` = {"qid":2} and `2` = {"qid":3} and `3` = {"qid":4}))*
正如我所看到的,在错误行中
where (`0` = {"qid":1} and `1` = {"qid":2} and `2` = {"qid":3} and `3` = {"qid":4})
它将0,1,2,3作为键,整个{“qid”:1}作为值。
仅供参考,我从声明中生成$qids
。
$qids = Examquestion::select('qid')->where('examid', $examid)->get();
有什么方法可以只保存$qids
中的值而不是对。
希望你了解这个场景。 TIA。
答案 0 :(得分:5)
使用此代替
$qids = Examquestion::where('examid', $examid)->lists('qid');
然后在
中使用此数组$questions = Question::whereIn('qid', $qids)->get();
你会得到你的结果
答案 1 :(得分:2)
由于qid
是重复的,因此是多余的,您可以展平数组,并使用whereIn
子句:
Question::whereIn('qid', array_flatten($qids));
答案 2 :(得分:1)
您提供的关联数组格式是错误的:
我尝试下面的例子......它的工作对我很好。
$ qids = array(" a" =>"苹果"," b" =>"橙子" ," c" =>" Pears");
$questions = Question::where(function($q) use ($qids)
{
foreach($qids as $key => $value)
{
$q->where($key, '=', $value);
}
})->get();
答案 3 :(得分:0)
谢谢大家。我的代码在你的帮助下工作了。这是我的工作代码片段。
$qids = Examquestion::select('qid')->where('examid', $examid)->lists('qid');
$questions = Question::select('qid','question','answer','option1','option2','option3','hint')
->whereIn('qid', $qids)
->get();
答案 4 :(得分:0)
案例:当您必须在where条件下进行数组排列时,您可能会遇到大小写问题($ option是array,对于使用BINARY的大小写敏感):-
$option = DB::table('test_results')->whereIn('user_id',$form_id)->pluck('answer');
$answer = Db::table('answer_keys')->whereIn(DB::raw('BINARY 'option''), $option)->get('answer');