我的数据库中有两个表。 餐桌许可证
身份证 | 许可类型 | 允许的最大数 |
---|---|---|
1 | 已满 | 24 |
2 | 一半 | 12 |
3 | 四分之一 | 6 |
表格条目
ID | 用户ID | 用户名 | 许可类型 | 持续时间 | 状态 | 日期 |
---|---|---|---|---|---|---|
1 | 1 | 约翰·史密斯 | 已满 | 6 | 已批准 | 2023-12-08 |
2 | 2 | 亚当·韦斯特 | 已满 | 8 | 已批准 | 2023-12-08 |
3 | 1 | 约翰·史密斯 | 已满 | 2 | 待定 | 2023-12-08 |
4 | 1 | 约翰·史密斯 | 一半 | 2 | 已批准 | 2023-12-09 |
5 | 1 | 约翰·史密斯 | 四分之一 | 1 | 已批准 | 2023-12-07 |
6 | 2 | 亚当·韦斯特 | 已满 | 3 | 已批准 | 2023-12-08 |
7 | 1 | 约翰·史密斯 | 已满 | 2 | 已批准 | 2023-12-08 |
8 | 1 | 亚当·韦斯特 | 一半 | 2 | 已批准 | 2023-12-09 |
9 | 1 | 约翰·史密斯 | 四分之一 | 1 | 已批准 | 2023-12-07 |
我想查看状态获得批准的每个人的参赛详细信息。
致:约翰·史密斯
许可证_类型 | 允许的最大数 | 总和(持续时间) |
---|---|---|
已满 | 24 | 8 |
一半 | 12 | 2 |
四分之一 | 6 | 2 |
致:亚当·韦斯特
许可证_类型 | 允许的最大数 | 总和(持续时间) |
---|---|---|
已满 | 24 | 11 |
一半 | 12 | 2 |
四分之一 | 6 | 0 |
路线:
Route::get('/entry_details', [EntryController::class, 'get_entry_details']);
入口控制器:
public function get_entry_details(){
$p1 = DB::table('Permit')->select('permit_type', 'max_allowed')->get();
$p2 =DB::table('Entry')->where([['status', '=', 'Approved'],['user_id','=',1]])->select(DB::raw('SUM(duration) as duration'))->groupBy('permit_type')->get();
$collection = collect($p1);
$merged= $collection->merge($p2);
$result = $merged->all();
return view('/entry_details',$result);
}
entry_details.blade.php
<tr>
<th>Permit Type</th>
<th>Max Allowed</th>
<th>Total Duration</th>
</tr>
@foreach($result as $data)
<tr>
<td>{{$data->permit_type}} </td>
<td>{{$data-max_allowed}} </td>
<td>{{$data->duration}} </td>
</tr>
@endforeach
错误:
Undefined variable $result
Error on line: **@foreach($result as $data)**
我不知道我做错了什么
问题不在查询中。您没有正确地在视图中传递变量。
要将变量传递给视图,可以使用以下语法:
return view('/entry_details',[ 'result' => $result]);
或
return view('/entry_details',compact('result'));
为什么要这样合并两个表?只需连接两个表,就会只给你一个查询,然后你在刀片中循环它。 顺便说一句,您未正确地将结果变量传递到视图中。 将您的代码更改为此。
public function get_entry_details()
{
$result = DB::table('Entry')
->leftJoin('Permit', 'Entry.permit_type', '=', 'Permit.permit_type')
->where('Entry.status', '=', 'Approved')
->where('Entry.user_id', '=', 1)
->select('Entry.permit_type', 'Permit.max_allowed', DB::raw('SUM(Entry.duration) as duration'))
->groupBy('Entry.permit_type', 'Permit.max_allowed')
->get();
return view('entry_details', compact('result'));
}
然后在刀片中entry_details像这样循环它
<tr>
<th>Permit Type</th>
<th>Max Allowed</th>
<th>Total Duration</th>
</tr>
@foreach($result as $data)
<tr>
<td>{{$data->permit_type}}</td>
<td>{{$data->max_allowed}}</td>
<td>{{$data->duration}}</td>
</tr>
@endforeach