Следуя комментариям, лучший способ достичь своей цели - правильно использовать Красноречивые отношения
Так что в вашем контроллере измените ваш запрос с
$category = Category::join('users', 'users.category_id', '=', 'categories.id')->get();
to
$categories = Category::with('users')->get();
Теперь результатом будет коллекция Category
с нетерпеливо загруженным отношением users
, что-то вроде:
[
{"id": 1, "name": "My category 1", "users": [{"id": 1, "mail": "user1@example.com"}, {"id": 2, "mail": "user2@example.com"}]},
{"id": 2, "name": "My category 2", "users": []},
{"id": 3, "name": "My category 3", "users": [{"id": 7, "mail": "user7@example.com"}]},
]
на ваш взгляд с простым foreach
Вы можете перебирать категории и каждого пользователя:
<table>
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Users</th>
</tr>
</thead>
<tbody>
@foreach($categories as $category)
<tr>
<td>
{{ $category->id }}
</td>
<td>
{{ $category->name }}
</td>
<td>
<ul>
@foreach($category->users as $user)
<li>
{{ $user->getFullName()}}
</li>
@endforeach
</ul>
</td>
</tr>
@endforeach
</tbody>
</table>
Примечание
Я видел, что ваше отношение объявлено как
public function users(){
return $this->hasMany(User::class)->where("active_status",1)->where("user_type", 'user');
}
Мне не очень нравитсямного, чтобы добавить все эти where
внутри объявления отношения.Я думаю, что лучше использовать локальные области , поскольку этот код может использоваться в других частях вашего кода.