从SQL表列回显数据到HTML行

时间:2016-07-01 12:20:07

标签: php mysql laravel

我有这个Laravel代码从数据库中检索数据:

$stats = DB::table('jobRequirements')
    ->join('jobs', 'jobRequirements.job', '=', 'jobs.id')
    ->join('types', 'jobRequirements.type', '=', 'types.id')
    ->join('users', 'jobs.user', '=', 'users.id')
    ->select(DB::raw('users.name as user, SUM(jobRequirements.number) as number, types.name as type'))
    ->where('jobRequirements.active', 1)
    ->groupBy('types.id')
    ->orderBy('users.name'asc')
    ->get();

return view('stats',compact('stats'));

然后我用Laravel刀片将它显示在表格中:

@foreach($stats as $s)
    <tr>
    <td>{{$s->user}}</td>   
    <td>{{$s->number}}</td>
    <td>{{$s->type}}</td>
    </tr>
@endforeach

我得到了这个:

table {
  border-collapse: collapse;
}
table,
td {
  border: 1px solid black;
}
td {
  padding: 5px;
}



<table>
  <tr>
    <td>User1</td>
    <td>3</td>
    <td>Type2</td>
  </tr>
  <tr>
    <td>User1</td>
    <td>1</td>
    <td>Type3</td>
  </tr>
  <tr>
    <td>User2</td>
    <td>2</td>
    <td>Type1</td>
  </tr>
  <tr>
    <td>User4</td>
    <td>7</td>
    <td>Type3</td>
  </tr>
  <tr>
    <td>User4</td>
    <td>2</td>
    <td>Type6</td>
  </tr>
</table>

但我需要这样:

table {
  border-collapse: collapse;
}
table,
td {
  border: 1px solid black;
}
td {
  padding: 5px;
}



<table>
  <tr>
    <td>User name</td>
    <td>Type1</td>
    <td>Type2</td>
    <td>Type3</td>
    <td>Type6</td>
  </tr>
  <tr>
    <td>User1</td>
    <td>0</td>
    <td>3</td>
    <td>1</td>
    <td>0</td>
  </tr>
  <tr>
    <td>User2</td>
    <td>2</td>
    <td>0</td>
    <td>0</td>
    <td>0</td>
  </tr>
  <tr>
    <td>User4</td>
    <td>0</td>
    <td>0</td>
    <td>7</td>
    <td>2</td>
  </tr>
</table>

我怎样才能做到这一点?

我不需要完整的解决方案,一些示例或方向会很好。它也可以是普通的PHP。

2 个答案:

答案 0 :(得分:1)

您有两种解决方案:

  1. 修复您的查询,以便您可以获得这样的内容(我假设您的类型已修复?!) SELECT用户名,type1数量,type2数量,type3数量,类型6数量

  2. 在控制器中返回视图(..)之前,以这种格式存储数据:

  3. [username] = ['type1'=数字,'type2'=&gt;数字','type3'=&gt;数字','type7'=&gt;一个数字']

    $data = array();
    // foreach row
    foreach ($stats as $key => $value) {
        // if user doesn't exist in the array
        if (!array_key_exists($value->user, $data))  {
            // Add the user to the array
            $data[$value->user] = array('type1' => 0, 'type2' => 0, 'type3' => 0, 'type6' => 0);
        }
        // Add the number of the type to the corresponded type
        // Optional: You can do a check before adding if the type is already added
        $data[$value->user][$value->type] = $value->number;
    }
    

    将$ data 传递到您的视图,并在您执行的视图中执行:

    @foreach($stats as $key => $value)
    <tr>
    <td>{{$key}}</td>
    <td>{{$value['type1']}}</td>
    <td>{{$value['type2']}}</td>
    <td>{{$value['type3']}}</td>
    <td>{{$value['type7']}}</td>
    </tr>
    @endforeach
    

    我希望我能帮到你一点。

答案 1 :(得分:0)

试试这个,

<table>     
<tbody>
    <tr>
        <td><b>User</b></td>{{ $user }}
    </tr>
    <tr>
        <td><b>Number</b></td>{{ $number }}
    </tr>
    <tr>
        <td><b>Type</b></td>{{ $type }}
    </tr>
</tbody>

要打印表格,

{{1}}