Импорт нескольких идентификаторов в одной записи

#laravel

#laravel

Вопрос:

Я могу добавить элемент, который является ‘product_id’ при каждом импорте. Мой вопрос в том, как добавить несколько идентификаторов продукта с несколькими количествами в одну запись, а не один идентификатор?

 Schema::create('imports', function (Blueprint $table) {
            $table->id();
            $table->bigInteger('supplier_id');
            $table->bigInteger('branch_id');
            $table->bigInteger('product_id');
            $table->bigInteger('quantity');
            $table->double('cost',null,2);
            $table->timestamps();
        });
 

Контроллер

 $import = new Import();
        $import->supplier_id = $request->supplier_id;
        $import->branch_id = $request->branch_id;
        $import->product_id = $request->product_id;
        $import->quantity = $request->quantity;
        $import->cost = $request->cost;
        $import->save();
 

Комментарии:

1. Есть $request->supplier_id; ли и $request->quantity; в типе массива?

2. моя проблема не в том, как обработать запрос, моя проблема в том, как сохранить его в базе данных

3. Я пытаюсь разобраться в вашей проблеме. Что вы имеете в виду при добавлении нескольких идентификаторов product_id ?

4. Я хочу сохранить одну запись в базе данных, которая содержит supplier_id, branch_id, total_cost и несколько продуктов с несколькими количествами

Ответ №1:

Поскольку вы хотите добавить несколько продуктов, связанных с одним импортом, вам нужно использовать one-to-many отношение. Вам нужно создать другую модель ImportProduct с отношением к Import модели следующим образом

 class ImportProduct extends Model 
{

    ...

    function import()
    {
        return $this->belongsTo(Import::class);
    }

    ...
}

 

И в вашей Import модели вы добавите

 function products()
{
   return $this->hasMany(ImportProduct::class);
}
 

В import_products процессе миграции вы добавите

 ...

$table->id();
$table->bigInteger('import_id');
$table->bigInteger('product_id');
$table->bigInteger('quantity');

...
 

Вы удалите product_id и quantity из imports миграции.

Теперь в вашем контроллере вы можете добавить один импорт с несколькими продуктами, используя products() отношение из Import модели.

 $import = new Import();
$import->supplier_id = $request->supplier_id;
$import->branch_id = $request->branch_id;     
$import->cost = $request->cost;
$import->save();

// $import->products()->associate($products);

//foreach ($products as $product) {
//    $import_product = new ImportProduct();
//    $import_product->import_id = $import->id; 
//    $import_product->product_id = $product->id;
//    $import_product->quantity = $product->quantity;
//    $import_product->save();  
//}