Как получить доступ к столбцу в таблице отношений MM в Laravel

Я создал отношения «многие ко многим» в laravel, где пользователи могут делать объявления о событии.

Проблема в том, что я хочу получить объявление сообщение из базы данных, используя отношение.

Вот мой код:

Миграция базы данных:

   Schema::create('announcements', function (Blueprint $table) {
        $table->id();
        $table->text("message");
        $table->foreignId('user_id')->constrained()->cascadeOnDelete()->cascadeOnUpdate();
        $table->foreignId('event_id')->constrained()->cascadeOnDelete()->cascadeOnUpdate();
        $table->timestamps();
    });

Модель события:

public function announcements() {
    return $this->belongsToMany(User::class, 'announcements');
}

Модель пользователя:

public function announcements() {
    return $this->belongsToMany(Event::class, 'announcements');
}

Контроллер событий:

 public function getEventAnnouncements($id) {
    $event = Event::find($id);


    $ann = [];
    $event->announcements->each(function ($a) use ($ann) {
        // echo $a;
        // $ann += $a->message;
    });

    return $ann;
}

Что я должен написать в контроллере, чтобы получить содержимое столбца messages?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
1
0
32
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете получить доступ к атрибуту сообщения, используя ключевое слово pivot.

$event->announcements->pivot->message;

Таким образом, вы можете получить к нему доступ. И у меня есть небольшой совет для вас, измените имя вашей сводной таблицы на user_event, чтобы было понятно.

Это дает мне свойство [pivot] не существует в этом экземпляре коллекции. Потому что мне нужно получить один экземпляр в объявлении, а это не так. Я хочу получать все объявления.

Kareem Salem 06.05.2022 04:14
Ответ принят как подходящий

Я нашел решение!

Сначала я должен был добавить точку опоры в Модели.

Модель события:

public function announcements() {
   return $this->belongsToMany(User::class, 'announcements')->withPivot('message');
}

Модель пользователя:

public function announcements() {
    return $this->belongsToMany(Event::class, 'announcements')->withPivot('message');
}

И, наконец, прокрутите результаты, чтобы получить сообщения.

Контроллер событий:

    $ann = [];
    foreach ($event->announcements as $a) {
        $ann[] = [
            "name" => $a->name,
            "announcement" => $a->pivot->message,
            "created_at" => $a->pivot->created_at,
        ];
    }

Это сработало отлично!

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