Laravel控制器从SQL表返回特定数据技术求助
解决SQL表多字段数据返回问题
嘿,看你的代码,问题出在question::lists('Answer1', 'id')这一行——这个方法(Laravel旧版本的lists,新版本对应pluck)只会取出id作为键、Answer1作为值的键值对集合,自然只能拿到同一列的数据啦。下面给你几个实用的解决方案,按需选择就行:
1. 获取指定多个字段的完整数据集
如果你需要拿到包含title、Answer1、Answer2这类多字段的完整问题数据,用select()指定字段再搭配get()即可:
public function view_Questionnaire(Questionnaire $Questionnaire) { // 把需要的字段都列在select里,比如id, title, Answer1, Answer2 $cats = question::select('id', 'title', 'Answer1', 'Answer2')->get(); // 修正语法错误:是-> 而不是 - $Questionnaire->option_name = unserialize($Questionnaire->option_name); return view('questionnaire.view', compact('Questionnaire', 'cats')); }
这样$cats就是包含所有指定字段的集合,在视图里你可以遍历每个question,用{{ $question->title }}、{{ $question->Answer1 }}这类方式调用不同字段。
2. 获取特定字段的键值对(类似lists的结构)
要是你还是需要键值对形式,但想关联其他字段,比如用id做键、title做值,或者把多个答案字段打包成值:
// 示例1:id为键,title为值 $cats = question::pluck('title', 'id'); // 示例2:id为键,同时包含Answer1和Answer2作为值数组 $cats = question::select('id', 'Answer1', 'Answer2') ->get() ->mapWithKeys(function ($item) { return [$item->id => [ 'answer1' => $item->Answer1, 'answer2' => $item->Answer2 ]]; });
3. 额外提醒:关联当前问卷的问题
如果你的question表有questionnaire_id字段,需要只返回当前问卷对应的问题,记得加上where条件过滤:
$cats = question::where('questionnaire_id', $Questionnaire->id) ->select('id', 'title', 'Answer1', 'Answer2') ->get();
另外注意你代码里的小bug:$Questionnaire-option_name少了一个>,应该是$Questionnaire->option_name,不然序列化解析会报错哦。
内容的提问来源于stack exchange,提问作者J.Fair
相关产品推荐
相关产品推荐

