Получить все значения, принадлежащие модели

У меня есть модель Community, и у каждого из этих сообществ может быть badges. Мой вопрос в том, как бы я назначал значки сообществу, а затем отображал их в представлении. Я изучил отношения Laravel, но мне не удалось заставить их работать, хотя сценарий соответствует их цели.

У меня есть 3 таблицы:

communities - Таблица заполнена сообществами, зарегистрированными в приложении.

community_badges — содержит столбцы id, community_id и badge_type

badge_types - содержит информацию о каждом значке, например, его имя, описание и т. д.

community_id в таблице community_badges относится к id в таблице badge_types. Когда я получаю значки с помощью красноречивого и отображаю их в представлении, не имеет значения, какие сообщества имеют значки, все сообщества имеют одинаковые значки.

Как мне назначить badges конкретным communities и отобразить их в представлении?

(Текущий код в представлении:)

    public function index()
    {
        $communitiesIds = CommunityMemberList::where('user_id', Auth::user()->id)->pluck('community_id');
        $communities = Community::whereIn('id', $communitiesIds)->get();

        $badgeTypeId = CommunityBadge::where('community_id', $communitiesIds)->pluck('badge_type');
        $badges = BadgeType::whereIn('id', $badgeTypeId)->get();

        return view('home', compact('communities', 'badges'));
    }

Заранее спасибо :)

Можете ли вы показать нам ваши отношения на ваших моделях?

Piazzi 10.03.2019 16:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сделайте свою структуру БД такой

communities:id, ...
badge_types:id, ...
community_badges:community_id,badge_type_id, ...

Определите свои отношения

В модели сообщества определите

public function badge_types()
{
    return $this->belongsToMany(BadgeTypes::class, 'community_badges');
    // or when you not change db structure  
    //return $this->belongsToMany(BadgeTypes::class, 'community_badges', 'community_id','badge_type');
}

Применение

$communities = Community::with('badge_types')->get();
foreach($communities as $community) {
    $communityBadges = $community->badge_types;
    // other logic here 
}

Редактировать:

public function index()
{
    $communitiesIds = CommunityMemberList::where('user_id', Auth::user()->id)->pluck('community_id');
    $communities = Community::whereIn('id', $communitiesIds)->with('badge_types')->get();

    return view('home', compact('communities'));
}

В представлении кода, подобного этому

@foreach($communities as $community) 
    @php($communityBadges = $community->badge_types)

    @foreach($communityBadges as $badgeType) 
        {{ $badgeType->id }} 
    // other logic here 
    @endforeach
@endforeach

Получение этой ошибки: Property [badge_types] does not exist on this collection instance.

Universal Link 10.03.2019 16:54

Ах, я оставил там dd(), который не возвращал переменную. Ошибка новичка. Спасибо, теперь работает :)

Universal Link 10.03.2019 16:56

Ok. Поляна тебе в помощь

Davit Zeynalyan 10.03.2019 16:59

Другие вопросы по теме