Laravel5中如何从控制器向视图传递两个查询结果对象
解决Laravel中使用
->get()获取全部记录时提示“未定义变量”的问题 看起来你遇到的问题挺典型的:用->first()能正常拿到单条数据,但切换成->get()想获取所有记录时,就触发了“未定义变量”的错误。咱们一步步拆解排查,搞定这个问题:
1. 先把查询语句补完整
从你贴的代码片段来看,查询语句没写完(最后是p.p...),这种语法不完整的情况,很可能会导致后续变量赋值出问题,进而引发“未定义变量”的假象。先确保你的查询是完整闭合的,比如:
public function ratingdata() { $pacra['pacra'] = DB::table('og_ratings AS p') ->select( 'p.client_id as Id', 'p.ppl_date as Ppl', 'p.notification_date as Notification ', 'p.dissemination_date as Dissemination', 'p.rating_type_id as ratingTypeId', 'p.rating_scale_id' // 把你需要的其他字段补充完整 ) // 如果有查询条件,这里补充where、join等子句 ->get(); // 一定要确保调用get()并闭合整个查询语句 // 关键:别忘了返回视图并把变量传过去 return view('你的视图名称', $pacra); }
2. 检查视图里的变量引用是否正确
“未定义变量”的错误大多出在视图层,而不是控制器的查询阶段。你得确认视图里用的变量名和控制器传递的完全一致:
- 控制器里你把查询结果存在
$pacra['pacra']里,所以视图中要使用$pacra来遍历数据,比如:
@foreach($pacra as $ratingItem) <div>客户ID:{{ $ratingItem->Id }}</div> <div>发布日期:{{ $ratingItem->Ppl }}</div> <!-- 其他字段按需展示 --> @endforeach
要是视图里误用了别的变量名(比如$data),肯定会触发“未定义变量”的错误。
3. 排查查询结果为空的情况
如果->get()返回的是空集合,Laravel本身不会报错,但如果视图里直接去访问集合的属性(而不是用循环遍历),就会引发“属性不存在”的错误,这很容易被误认为是“未定义变量”。比如你要是写{{ $pacra->Id }}而不是用@foreach循环,空集合就会出问题。
4. 用调试工具确认查询结果
可以在控制器里加一行dd()来输出查询结果,看看是不是真的获取到了数据:
public function ratingdata() { $pacra['pacra'] = DB::table('og_ratings AS p') ->select(/* 字段列表 */) ->get(); dd($pacra['pacra']); // 直接输出查询结果,确认数据是否正常 return view('你的视图名称', $pacra); }
如果dd()能正常输出集合(哪怕是空集合),说明查询环节没问题,问题肯定出在视图层的变量引用上。
5. 换个更直观的变量传递方式(可选)
要是觉得数组传递变量容易搞混,可以试试compact()写法,更直观:
public function ratingdata() { $pacraData = DB::table('og_ratings AS p') ->select(/* 字段列表 */) ->get(); return view('你的视图名称', compact('pacraData')); }
然后视图里用$pacraData来遍历数据就行,出错概率更低。
内容的提问来源于stack exchange,提问作者Khubab
相关产品推荐
相关产品推荐

