deptController
で取得した下記のような$depts
コレクションを、area
ごとに出力したいので、部署→エリア→スタッフになるように操作したいです。
理由はblade側にif文などを書きたくないからです。
どのようにしたら良いでしょうか?
よろしくお願いします・
関連する質問
やりたいことは以前の二つの質問から変わっていません。
表示したいHTML
変更したいデータ
[{ "id":1, "name":"部署名1", "staffs":[{ "id":1, "name":"スタッフ1", "area":{ "id":1, "name":"東", }, "pivot":{ "dept_id":1, "staff_id":1 } },{ "id":2, "name":"スタッフ2", "area":{ "id":1, "name":"東", }, "pivot":{ "dept_id":1, "staff_id":2 } },{ "id":3, "name":"スタッフ3", "area":{ "id":2, "name":"西", }, "pivot":{ "dept_id":1, "staff_id":3 } }, },{ "id":2, "name":"部署名2", "staffs":[{ "id":4, "name":"スタッフ4", "area":{ "id":1, "name":"東", }, "pivot":{ "dept_id":2, "staff_id":4 } },{ "id":5, "name":"スタッフ5", "area":{ "id":2, "name":"西", }, "pivot":{ "dept_id":2, "staff_id":5 } },{ "id":6, "name":"スタッフ6", "area":{ "id":2, "name":"西", }, "pivot":{ "dept_id":2, "staff_id":6 } }, }]
期待するデータ
[{ "id":1, "name":"部署名1", "area": { "id": 1, "name": "東", "staffs":[ { "id":1, "name":"スタッフ1", "area":{ "id":1, "name":"東", } } }, .... ]
テーブル
モデル
<?php namespace App; use Illuminate\Database\Eloquent\Model; use App\Dept; use App\Area; /** * Staff */ class Staff extends Model { public function depts() { return $this->belongsToMany(Dept::class); } public function area() { return $this->belongsTo(Area::class); } }
class deptController extends Controller { public function index() { // このdeptsを操作したい $depts = Dept::with(['staffs.area'])->get(); return view('depts/index', [ 'depts' => $depts, ]); } }
<table class="table table-condensed table-striped"> <th>部署名</th> <th>所属スタッフ</th> <tbody id="sort_items"> @foreach ($depts as $dept) <tr id="item_{{ $dept->id }}" class="sort_item"> <td>{{ $dept->name }}</td> <td> // ここに東西で分けてスタッフを表示したい // ifを使いたくない @foreach($dept->areas as $area) <div>{{$area->name}}</div> <div>{{ $area->staffs->implode('name')}}</div> @endforeach </td> </tr> @endforeach </tbody> </table>
if文を使用した場合
<table class="table table-condensed table-striped"> <th>部署名</th> <th>所属スタッフ</th> <tbody id="sort_items"> @foreach ($depts as $dept) <tr id="item_{{ $dept->id }}" class="sort_item"> <td>{{ $dept->name }}</td> <td> <div>東</div> @foreach ($dept->staffs as $staff) @if ($staff["areas"]->id === 0) {{ $staff["name"]}} @endif @endforeach <div>西</div> @foreach ($dept->staffs as $staff) @if ($staff["areas"]->id === 1) {{ $staff["name"]}} @endif @endforeach </td> </tr> @endforeach </tbody>
回答1件
あなたの回答
tips
プレビュー