Как создать сводную таблицу в Laravel - PullRequest
0 голосов
/ 11 января 2019

У меня есть спонсорское приложение, которое я создаю и пытаюсь заставить сводную таблицу работать между моими пользователями и детьми, но когда у меня есть пользователь, спонсирующий ребенка, сводная таблица 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_id & user_id были введены в сводную таблицу kid_user. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 11 января 2019

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

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

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

А в модели вашего малыша:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...