実現方法はいくつかあると思いますが、大きく分けて下記の方法で可能かと思います。
方法
$users->languageX
が存在しない場合、languageX
プロパティを作成しないようにモデル内でロジックを組む。
- VIEWの中で条件分岐でHTMLテーブルを作成する。
- VIEWのHTMLとCSSを組みなおす。
※補足
上記1.の方法については、SQLを組みなおすか、モデル内でデータ取得後にオブジェクトや連想配列を組みなおします。DBのテーブル構成にもよりますが、SQLを組みなおす方法であればかなり簡単に対応できます。
上記3.の方法はHTMLの <table> 構成だと、ご質問のような対応が難しいので<dl><dt>...</dt><dd>...</dd></dl>
などのようなHTMLにします。そしてフォーマットはCSSで対応します。
上記2の方法
== 追記変更(2018/01/10) ==
コメントで $users->language1 は別々のプロパティだとおしえて頂いたので、サンプルコードをループを使わない方法に変更しました。各プロパティで表示する場合に カラム表示カウンター を加算していき、すべてのカラムとカラムの境界に </tr><tr> を表示するIF文を挟むと実現できます。
php
1<table>
2 <tbody>
3 <tr>
4 <th rowspan="2">言語</th>
5@php
6 //カラム表示カウンター
7 $j = 1;
8 //カラム数が2
9 $columnsNumber = 2;
10@endphp
11
12{{-- プロパティ1 --}}
13@if (!empty($users->プロパティ1))
14 <td>
15 @if (!empty($users->プロパティ1))
16 {{ $users->プロパティ1->name }}
17 @endif
18 @if (!empty($users->プロパティ1-1))
19 {{ $users->プロパティ1-1->name }}
20 @endif
21 </td>
22 {{-- カラム表示カウンターはカラム表示ごとに加算 --}}
23 @php $j++; @endphp
24@endif
25{{-- 行区切り --}}
26@if ($j > $columnsNumber && $j % ($columnsNumber + 1) == 0)
27 </tr>
28 <tr>
29@endif
30
31{{-- プロパティ2 --}}
32@if (!empty($users->プロパティ2))
33 <td>
34 @if (!empty($users->プロパティ2))
35 {{ $users->プロパティ2->name }}
36 @endif
37 @if (!empty($users->プロパティ2-1))
38 {{ $users->プロパティ2-1->name }}
39 @endif
40 </td>
41 {{-- カラム表示カウンターはカラム表示ごとに加算 --}}
42 @php $j++; @endphp
43@endif
44{{-- 行区切り --}}
45@if ($j > $columnsNumber && $j % ($columnsNumber + 1) == 0)
46 </tr>
47 <tr>
48@endif
49
50{{-- 以降同様にすべてのプロパティを続ける --}}
51
52 </tr>
53 </tbody>
54</table>
カラム数が2($columnsNumber = 2)で、</tr>
と<tr>
を表示する条件は下記の時になります。下記のように整理するとわかりやすいかもしれません。
カラム表示カウンター % (2 + 1) == 0
html
1<table>
2 <tbody>
3 <tr>
4 <th rowspan="2">言語</th>
5
6<!-- ループ内IF条件ここから -->
7 <td>言語1</td> <!-- $i == 1, $j == 1 -->
8 <td>言語2</td> <!-- $i == 2, $j == 2 -->
9 </tr> <!-- $i == 3, $j == 3 -->
10 <tr> <!-- $i == 3, $j == 3 (上に同じ) -->
11 <td>言語3</td> <!-- $i == 3, $j == 3 (上に同じ) -->
12 <td>言語4</td> <!-- $i == 4, $j == 4 -->
13<!-- ループ内IF条件ここまで -->
14
15<!-- 言語2がない場合ここから -->
16 <td>言語1</td> <!-- $i == 1, $j == 1 -->
17 <td>言語3</td> <!-- $i == 3, $j == 2(言語2は表示なし) -->
18 </tr> <!-- $i == 4, $j == 3 -->
19 <tr> <!-- $i == 4, $j == 3 -->
20 <td>言語4</td> <!-- $i == 4, $j == 3 -->
21<!-- 言語2がない場合ここまで -->
22
23<!-- 言語1,3がない場合ここから -->
24 <td>言語2</td> <!-- $i == 2, $j == 1 -->
25 <td>言語4</td> <!-- $i == 4, $j == 2(言語1,3は表示なし) -->
26<!-- 言語1,3がない場合ここまで -->
27
28 </tr>
29 </tbody>
30</table>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/10 02:18
退会済みユーザー
2018/01/10 11:29