将两个雄辩的查询合并为一个结果

问题描述 投票:0回答:2

我的数据库中有两个表。 餐桌许可证

身份证 许可类型 允许的最大数
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)**

dd($结果); dd($result) looks like this

我不知道我做错了什么

laravel eloquent controller
2个回答
0
投票

问题不在查询中。您没有正确地在视图中传递变量。

要将变量传递给视图,可以使用以下语法:

return view('/entry_details',[ 'result' => $result]);

return view('/entry_details',compact('result'));

0
投票

为什么要这样合并两个表?只需连接两个表,就会只给你一个查询,然后你在刀片中循环它。 顺便说一句,您未正确地将结果变量传递到视图中。 将您的代码更改为此。

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
© www.soinside.com 2019 - 2024. All rights reserved.