Laravel中合并Eloquent查询结果及视图变量未定义问题求助
问题修复方案
1. 解决「Undefined variable $result」错误
控制器返回视图时,你直接传递了集合转成的数组,而Laravel视图需要接收键值对数组来传递变量。同时视图路径不需要前缀斜杠:
修改控制器里的返回语句:
// 原代码:return view('/entry_details',$result); return view('entry_details', ['result' => $result]);
2. 修复数据关联错误(合并逻辑问题)
你当前的merge方法只是简单合并两个集合,无法按permit_type关联数据。正确做法是用数据库联查一次获取所有需要的数据,不需要手动合并:
替换控制器里的查询代码:
public function get_entry_details(){ // 联查Permit表和Entry的统计结果,按permit_type关联 $result = DB::table('Permit') ->leftJoin(DB::raw('(SELECT permit_type, SUM(duration) as total_duration FROM Entry WHERE status = "Approved" AND user_id = 1 GROUP BY permit_type) as entry_stats'), function($join) { $join->on('Permit.permit_type', '=', 'entry_stats.permit_type'); }) ->select( 'Permit.permit_type', 'Permit.max_allowed', // 用COALESCE处理没有对应Entry记录的情况,默认显示0 DB::raw('COALESCE(entry_stats.total_duration, 0) as total_duration') ) ->get(); return view('entry_details', ['result' => $result]); }
3. 修复视图语法错误
视图里的{{$data-max_allowed}}是语法错误,应该用对象属性访问符->:
<!-- 原代码:<td>{{$data-max_allowed}} </td> --> <td>{{$data->max_allowed}} </td>
最终效果
对于User_ID=1的用户,最终会显示:
| Permit Type | Max Allowed | Total Duration |
|---|---|---|
| Full | 24 | 8 |
| Half | 12 | 2 |
| Quarter | 6 | 2 |
内容的提问来源于stack exchange,提问作者Untamable Beast
相关产品推荐
相关产品推荐

