【问题标题】:How to solve the problem of dynamic rowspan problem in table in laravellaravel如何解决table中动态rowspan问题
【发布时间】:2019-12-03 18:32:54
【问题描述】:

我正在尝试如下图所示的表格 我在下面写了这个表创建的逻辑

 @foreach($users as $key => $user)
            <tr>
              <td>{{$key+1}}</td>
              <td>{{$user->name}}</td>
              <td rowspan="{{count($users->where('area',$user->area))}}">
                 {{$user->userarea->name}}</td>

              <td rowspan="{{count($user->candidate->election->candidates)}}">{{$user->candidate->election->name}}</td>
            </tr>
            @endforeach
             </tbody>

但是这段代码为我生成了下面这样的代码 这里选举和候选人有一对多的关系,候选人和用户有一对一的关系帮助我实现我的预期结果。

【问题讨论】:

标签: php laravel


【解决方案1】:

您可以跟踪已经渲染了哪些选举/区域。这可以通过创建一个包含对这些对象的引用的数组来完成。然后在模板中添加一个 if 语句,检查是否已呈现选举/区域:

<?php $renderedElections = []; ?>
<?php $renderedAreas = []; ?>
@foreach($users as $key => $user)
<tr>
    <td>{{$key+1}}</td>
    <td>{{$user->name}}</td>
    @if (!in_array($user->userarea->name, $renderedAreas))
        <?php $renderedElections[] = $user->userarea->name ?>
        <td rowspan="{{count($user->userarea->name)}}">
            {{$user->userarea->name}}
        </td>
    @endif
    @if (!in_array($user->candidate->election->name, $renderedElections))
        <?php $renderedElections[] = $user->candidate->election->name ?>
        <td rowspan="{{count($user->candidate->election->candidates)}}">
            {{$user->candidate->election->name}}
        </td>
    @endif
</tr>

这不是最好的解决方案,但它简单易行。为此,用户必须按选举和区域完美排序。

【讨论】:

  • 在您的代码中有一个错误“count(): Parameter must be an array or an object that implement Countable (View: C:\xampp\htdocs\online-voting-system\resources\views \candidate\index.blade.php)"。所以通过改变这将起作用。所以我编辑了你的
【解决方案2】:

此代码未经测试,但理论上应该可以工作。我尝试从您发布的代码中收集有关您的模型关系的信息,但可能需要对模型名称和关系进行一些调整。

以下代码基本上获取所有用户,每个用户都有areacandidatecandidate.election 关系,然后按“选举名称”(第一个条件)和“区域名称”(第二个条件)对用户进行分组。

生成的数组将是这样的:

// $elections will be:
// [
//      'Presidential' => [
//          'Dhaka-5' => [ candidates for that area in that election type ],
//          'Dhaka-1' => [ candidates for that area in that election type ],
//          ...
//      ],
//      ...
// ]

在您的控制器中执行:

$elections = User::with('area', 'candidate.election')->get()->groupBy(function ($user) {
    return $user->candidate->election->name;
}, function ($user) {
    return $user->area->name;
});

// then pass $elections to the view...

那么在你看来:

<table>
@php ($i = 1)
@foreach ($elections as $election => $areas)
    @foreach ($areas as $area => $candidates)
        @php ($areaLoop = $loop)

        @foreach ($candidates as $user)
            <tr>
                <td>{{ $i++ }}</td>
                <td>{{ $user->name }}</td>
                @if ($loop->first)
                    <td rowspan="{{ $candidates->count() }}">{{ $area }}</td>
                @endif

                @if ($areaLoop->first)
                    <td rowspan="{{ $areas->sum(function ($area) { return $area->count(); }); }}">{{ $election }}</td>
                @endif
            </tr>
        @endforeach
    @endforeach
@endforeach
</table>

请注意,$candidates-&gt;count() 将是当前选举类型的特定选举区域的候选人人数。 $areas-&gt;sum(...) 将对每个区域的候选人人数求和,以获得该选举类型的候选人总数。

如果您需要进一步的解释或某些东西不起作用,请告诉我。我使用的所有关于收集函数的文档都可以在here 获得。

【讨论】:

  • 它在“return $user->candidate->election->name”这一行上说“试图获取非对象的属性'选举'”;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
相关资源
最近更新 更多