Laravel ManytoMany: Как прикрепить товар к пользователю при регистрации пользователя? - PullRequest
1 голос
/ 08 января 2020

Я новичок в Laravel и пытаюсь создать приложение для наших клиентов, чтобы подтвердить право собственности на их продукты. Я создал следующие таблицы и модели:

таблица пользователей

Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

таблица продуктов

Schema::create('products', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');
    $table->integer('etc');
    $table->timestamps();
});

таблица user_product

Schema::create('user_product', function (Blueprint $table) {
    $table->bigIncrements('id');

$table->unsignedBigInteger('user_id')->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

$table->unsignedBigInteger('product_id')->index();
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');

$table->timestamps();

});

модель пользователя

public function products()
 {
    return $this->belongsToMany('App\Product', 'user_product')->withTimestamps();
 }

модель продукта

public function users()
{
    return $this->belongsToMany('App\User');
}

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

Я использую ManyToMany, потому что хочу иметь все продукты в базе данных, даже если они принадлежат пользователю или нет. После связи между пользователем и продуктом, вы не можете получить доступ к этому продукту, не войдя в систему. Я надеюсь, что это имеет смысл, все еще работая над логистикой, стоящей за этим :)

Любая идея о том, как достичь этот сценарий? Любая помощь будет высоко ценится :)

1 Ответ

0 голосов
/ 08 января 2020

Если продукт может принадлежать только одному пользователю, и у пользователя может быть много продуктов, вам следует использовать One To Many и создать первичный ключ в таблице продуктов, вызвав пользователя и используя create () или save () функция. Используя softdelete в модели User, вы не рискуете удалить пользователя и его продукты.

Но если вы все равно хотите установить отношение «многие ко многим», используйте функцию attach () следующим образом:

$user->produtcs()->attach($productId);

или еще

$product->users()->attach($userId)

Но обе модели уже должны быть в базе данных, как пользователя, так и продукта.

Если вы хотите узнать, какому пользователю принадлежит продукт, вы можете добавить поле user_owner_id в таблицу user_product и добавьте ее в прикрепленный файл следующим образом:

$user->produtcs()->attach($productId, ['user_owner_id' => $userId]);
...