Как создать сводную таблицу в Laravel

У меня есть спонсорское приложение, которое я создаю и пытаюсь заставить сводную таблицу работать между моими пользователями и детьми, но когда у меня есть пользователь, спонсирующий ребенка, сводная таблица kid_user не заполняется kid_id или user_id. Не уверен, что мне не хватает.

  • У Малыша может быть столько пользователей (спонсоров), сколько им позволяют слоты.
  • Пользователи могут спонсировать ребенка, нескольких детей или одного ребенка несколько раз. если нужно.

Вот моя сводная таблица kid_user:

public function up()
{
    Schema::create('kid_user', function (Blueprint $table) {
        $table->integer('kid_id')->unsigned()->index();
        $table->foreign('kid_id')->references('id')->on('kids')->onDelete('cascade');
        $table->integer('user_id')->unsigned()->index();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->primary(['kid_id', 'user_id']);
    });
}

Затем в модели User: Пользователь может иметь много детей ...

public function kid()
{
    return $this->hasMany(Kid::class);
}

Затем на модели Kid: У детей может быть много пользователей ...

  public function user() {
      //return $this->belongsTo(User::class); (Tried this..)
        return $this->hasMany(User::class);
  }

Вот таблицы, которые я использую. (в таблицы включена только релевантная информация)

+---------------------+
| Tables_in_Database  |
+---------------------+
| kid_user            |
| kids                |
| users               |
+---------------------+

+-----------------------------+
|        users table          |
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
|  1 | John       | Smith     |
|  2 | Jane       | Doe       |
+----+------------+-----------+

+-----------------------------+
|        kids table           |
+----+------------+-----------+-------+
| id | first_name | last_name | slots |
+----+------------+-----------+-------+
|  1 | Bobby      | Little    |   3   | -> Can be sponsored 3 times
+----+------------+-----------+-------+

+--------------------+
|   kid_user table   | THE BELOW RESULTS ARE WHAT I'M LOOKING FOR.
+--------------------+
| *kid_id | *user_id | * = Primary Key
+---------+----------+
|    1    |     1    | -> Sponsored 1st Slot
+---------+----------+
|    1    |     2    | -> Sponsored 2nd Slot
+---------+----------+
|    1    |     1    | -> Sponsored 3rd Slot
+---------+----------+

Итак, когда Пользователь спонсирует Kid. Я бы хотел, чтобы kid_id и user_id были внесены в сводную таблицу kid_user. Любая помощь будет оценена.

Стоит ли изучать 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 и хотите разрабатывать...
4
0
3 460
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Прежде всего, вы можете захотеть переименовать функции в ваших моделях во множественном числе, поскольку у них не одна, а множество отношений.

Итак, в вашей пользовательской модели добавьте это:

public function kids()
{
    return $this->belongsToMany(Kid::class);
}

И в вашей модели Kid:

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

Затем, чтобы сохранить в сводной таблице, поскольку ваше имя таблицы правильное, просто выполните:

$user->kids()->attach($kid);

Сохраним правильно в сводной таблице. Сначала убедитесь, что у вас есть существующие User и Kid для переменных. Подробнее здесь

Спасибо за подсказку о функциях. Я как раз читал о belongsToMany и опробовал его. Куда мне добавить $user->kids()->attach($kid);, чтобы я мог сэкономить?

daugaard47 11.01.2019 21:36

Я не знаю, как вы накладываете свое приложение, где у вас бизнес-логика. Вы можете легко добавить это в свой контроллер. Просто получите $kid, который вы хотите спонсировать, и я предполагаю, что это должен быть текущий аутентифицированный пользователь, так что просто просто $kid = Kid::find(request('kid_id'));, а затем auth()->user->kids()->attach($kid);. Надеюсь это поможет.

nakov 11.01.2019 21:39

Отличный ответ!

w3spi 29.09.2019 12:46

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