Laravel使用pluck方法取数渲染select下拉框报未定义变量问题
问题原因
你遇到的问题由两处错误共同导致:
控制器pluck方法使用错误
Laravel的pluck()方法最多仅支持两个传入参数:第一个参数为需要提取的字段值,第二个为可选的、作为结果数组键名的字段。你一次性传入了7个字段参数,导致返回的集合结构不符合预期,无法正常取出字段值。
如果你需要获取模型的多个字段完整数据,应该用select()指定字段后调用get()获取结果集合;如果仅需填充下拉框的键值对,直接传入pluck('valor', 'ID')即可得到[ID => 对应valor值]的结构,更适合下拉框场景。Blade模板变量调用错误
你在@foreach循环中定义的迭代变量名为$configuracion,但模板中直接调用了未定义的$valor变量,所以会触发变量不存在的报错。就算按提示加了?? ''默认空值,也只会输出空内容,最终出现380个空选项。
修复代码
1. 控制器代码(EnviarCurriculumController.php)
如果你需要用到配置项的所有指定字段,修改create方法如下:
public function create() { $configuraciones = Configuracion::select('ID', 'variable', 'valor', 'valor_numerico', 'tabla', 'texto_largo', 'observacion')->get(); return view('enviar_curriculum', ['EnviarCurriculum' => new EnviarCurriculum(), 'configuraciones' => $configuraciones]); }
如果仅需填充下拉框,直接用更高效的pluck写法:
public function create() { // 键为ID,值为valor $configuraciones = Configuracion::pluck('valor', 'ID'); return view('enviar_curriculum', ['EnviarCurriculum' => new EnviarCurriculum(), 'configuraciones' => $configuraciones]); }
2. Blade模板代码(enviar_curriculum.blade.php)
如果用的是get()返回的完整模型集合,修改循环部分如下:
<select name="titulacion" id="titulacion"> <option disabled selected value="">* Titulación mas reciente</option> @foreach ($configuraciones as $configuracion) <option value="{{ $configuracion->ID }}"> {{ $configuracion->valor }}</option> @endforeach </select>
如果用的是pluck('valor', 'ID')返回的键值对集合,修改为:
<select name="titulacion" id="titulacion"> <option disabled selected value="">* Titulación mas reciente</option> @foreach ($configuraciones as $id => $valor) <option value="{{ $id }}"> {{ $valor }}</option> @endforeach </select>
内容的提问来源于stack exchange,提问作者El conde Lucanor
相关产品推荐
相关产品推荐

