在 Laravel 中的多个表中存储多行

Store multiple rows in multiple tables in Laravel

我想在数据库中的多个 table 中存储多行。我的控制器目前没有存储多个值,它只在我的 bill_productsitem_lists table 中保存一行。

purchases table:

    |   product   quantity     price     manufacturer    |
    |     a           1         12$           xyz        |
    |     b           2         1$             x         |
    |     c           10        10$            y         |

bill_products table:

    |   product   quantity     price    |
    |    a           1         12$      |
    |    b           2         1$       |
    |    c           10        10$      |

item_lists table:

    |   product   quantity     |
    |    a           1         |
    |    b           2         |
    |    c           10        |

这是我的purchase\purchase-entry.blade.php

<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-12">
            <div class="card">
                <div class="card-header">PURCHASE FORM</div>

                <div class="card-body">
            
                @if (Session::has('success'))
                    <div class="alert alert-success">{!! Session::get('success') !!}</div>
                @endif
                @if (Session::has('failure'))
                    <div class="alert alert-danger">{!! Session::get('failure') !!}</div>
                @endif
                         
    <form method="POST"   action="{{route('purchaseentryformsave')}}" enctype="multipart/form-data">
 @csrf
<div class="form-row">

    <div class="col-md-4 mb-3">
      <label >product NAME</label>
      <input type="text"  name="product[]"  placeholder="product" value="" required >
    </div>
    <div class="col-md-4 mb-3">
      <label >quantity</label>
      <input type="text"  name="quantity[]"  placeholder="quantity" value="" required >
    </div>
    <div class="col-md-4 mb-3">
      <label >price</label>
      <input type="text"  name="price[]"  placeholder=price" value="" required >
    </div>
    <div class="col-md-4 mb-3">
      <label >manufacturer</label>
      <input type="text"  name="manufacturer[]"  placeholder="manufacturer" value="" required >
    </div>
  </div>
</div>
<button class="btn btn-primary float-right" type="submit">SAVE</button>
</form>

相关路线:

Route::post('purchasesave', 'PurchaseController@purchasesave')->name('purchasesave');

我的控制器 PurchaseController.php 使用这 3 个模型:PurchaseBillProductItemList.

    public function purchaseentryformsave(Request $request)
   {
     
    
    $input = $request->all();

$purchases = [];
$bill_products = [];
$item_lists = [];

foreach( $request->product as $k => $p ) {
    $data = collect([
        'product' => $request['product'][$k],
        'quantity' => $request['quantity'][$k],
        'price' => $request['price'][$k],
        'manufacturer' => $request['manufacturer'][$k],
    ]);
    $purchases[] = $data->toArray();
    $bill_products[] = $data->except(['manufacturer'])->toArray();
    $item_lists[] = $data->except(['price', 'manufacturer'])->toArray();
}

Purchases::insert( $purchases );
BillProduct::insert( $bill_products );
ItemList::insert( $item_lists );

       return redirect('allpurchasesupplierlist')->with('success','PURCHASE ENTRY ADDED SUCCESSFULLY .'); 
     }

型号

项目列表

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Item_list extends Model
{
     protected $table = 'item_lists';
     protected $fillable = ['product','quantity'];
}

购买

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Purchase extends Model
{
     protected $table = 'purchases';
     protected $fillable = ['product','quantity','price'.'manufacturer'];
}

BillProduct

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Billproduct extends Model
{
     
     protected $table = 'bill_products';
     protected $fillable = ['product','quantity','price'];
}

最好使用 insert 而不是 create

$purchases = [];
$bill_products = [];
$item_lists = [];

foreach( $request->product as $k => $p ) {
    $data = collect([
        'product' => $request['product'][$k],
        'quantity' => $request['quantity'][$k],
        'price' => $request['price'][$k],
        'manufacturer' => $request['manufacturer'][$k],
    ]);
    $purchases[] = $data->toArray();
    $bill_products[] = $data->except(['manufacturer'])->toArray();
    $item_lists[] = $data->except(['price', 'manufacturer'])->toArray();
}

Purchases::insert( $purchases );
BillProduct::insert( $bill_products );
ItemList::insert( $item_lists );