Laravel使用模型获取数据失败,直接通过路由传递数据却正常的问题求助
解决Laravel模型数据传递到视图的"Undefined variable"问题
嘿,我来帮你排查这个问题!你遇到的核心问题是数据传递到视图的方式和视图访问数据的方式不匹配,咱们一步步理清楚:
问题根源
你在路由里把模型返回的数组包装在了"profiles"这个键下:
return view('profiles', [ "profiles" => profilesModel::all() ]);
这意味着在视图里,你的所有模拟数据都存储在$profiles这个变量(数组)里,而不是直接以$pNamaLengkap这类单独变量存在。但你可能在视图里直接写了{{ $pNamaLengkap }},自然会提示"Undefined variable"。
而你直接在路由里传递数据时,是把每个键都作为单独变量传给视图,所以能直接访问,这就是两种方式的核心区别。
解决方案一:修改视图的访问方式
保持当前的模型和路由代码不变,在Blade视图里通过$profiles数组来访问每个字段:
<div> <h2>{{ $profiles['pNamaLengkap'] }}</h2> <p>职位:{{ $profiles['pJobDescription'] }}</p> <p>部门:{{ $profiles['pUnitKerja'] }}</p> <p>总监办:{{ $profiles['pDirektorat'] }}</p> </div>
解决方案二:直接传递模型返回的数组(无需包装)
如果你希望在视图里还是能直接用$pNamaLengkap这类变量,可以修改路由,把模型返回的数组直接传给视图,不用包在profiles键里:
use App\Models\profilesModel; Route::get('/profiles', function () { // 直接传递数组,数组的每个键会成为视图中的单独变量 return view('profiles', profilesModel::all()); });
这样你在视图里写{{ $pNamaLengkap }}就可以正常访问了,和你直接在路由里传数据的效果完全一致。
额外小建议
遵循Laravel的命名惯例会让代码更易读:模型类名建议使用大驼峰命名,比如把profilesModel.php改成ProfilesModel.php,对应的类名也是ProfilesModel,路由里的引用也要同步修改哦。
内容的提问来源于stack exchange,提问作者daniel leander
相关产品推荐
相关产品推荐

