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






Прежде всего, вы можете захотеть переименовать функции в ваших моделях во множественном числе, поскольку у них не одна, а множество отношений.
Итак, в вашей пользовательской модели добавьте это:
public function kids()
{
return $this->belongsToMany(Kid::class);
}
И в вашей модели Kid:
public function users()
{
return $this->belongsToMany(User::class);
}
Затем, чтобы сохранить в сводной таблице, поскольку ваше имя таблицы правильное, просто выполните:
$user->kids()->attach($kid);
Сохраним правильно в сводной таблице. Сначала убедитесь, что у вас есть существующие User и Kid для переменных. Подробнее здесь
Я не знаю, как вы накладываете свое приложение, где у вас бизнес-логика. Вы можете легко добавить это в свой контроллер. Просто получите $kid, который вы хотите спонсировать, и я предполагаю, что это должен быть текущий аутентифицированный пользователь, так что просто просто $kid = Kid::find(request('kid_id'));, а затем auth()->user->kids()->attach($kid);. Надеюсь это поможет.
Отличный ответ!
Спасибо за подсказку о функциях. Я как раз читал о
belongsToManyи опробовал его. Куда мне добавить$user->kids()->attach($kid);, чтобы я мог сэкономить?