fomvasss
@fomvasss
PHP developer

Связь «многие-ко-многим». Как вывести связанные данные?

В БД есть две таблицы и организованная связь между ними belongsToMany ("многие-ко-многим") через промежуточную таблицу, для примера users (Пользователи), groups (Сообщества) и связующая таблица group_user.

Как мне вывести список checkbox-сов всех Сообществ сайта, с отмеченными checkbox-амы, для конкретного Пользователя, если он состоит в сообществе.

Делал так, но этот вариант не корректно работает

@foreach ($groups as $group)
	@foreach (@user->groups as $user_group)
		@if ($user_group->id == $group->id)
			<input type="checkbox" checked>$group->title
		@else
			<input type="checkbox">$group->title
		@endif
	@endforeach
@endforeach


Цикл в цикле а потом проверка условие как то не очень нравится.
Может есть какой то метод, что бы упростить проверку принадлежности одной модели к другой? Сам пока не могу разобраться(
  • Вопрос задан
  • 589 просмотров
Решения вопроса 1
@foreach ($groups as $group)
    @if ($user->groups->contains($group))
      <input type="checkbox" checked>{{ $group->title }}
    @else
      <input type="checkbox">{{ $group->title }}
    @endif
@endforeach
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
anton_lazarev
@anton_lazarev
@foreach ($groups as $group)
    @if (in_array($group, @user->groups))
      <input type="checkbox" checked>$group->title
    @else
      <input type="checkbox">$group->title
    @endif
@endforeach
Ответ написан
@marrs
Это надо делать на уровне БД

SELECT * FROM users u 
LEFT JOIN group_user gu ON (u.user_id = gu.user_id) 
LEFT JOIN group g ON (g.group_id = gu.group_id)
WHERE g.group_id = group_id
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы