【问题标题】:Store multiple rows in multiple tables in Laravel在 Laravel 的多个表中存储多行
【发布时间】:2020-08-14 13:10:45
【问题描述】:

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

purchases表:

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

bill_products表:

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

item_lists表:

    |   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'];
}

【问题讨论】:

  • 需要传递数组,或者需要运行一个循环
  • @sta 你能发布答案吗
  • @sta 你能发表你的答案吗
  • @sta 请帮忙

标签: laravel laravel-5 laravel-7


【解决方案1】:

最好使用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 );

【讨论】:

  • 我的表单在数组中提交了 10 个值,但每次在“ItemList”和“BillProduct”中提交时仍然存储单个值
  • 只需根据您的需要调整上面的示例。并显示您的模型和结构表。
  • 我没有收到任何错误消息。但是多个值没有存储在表中,它只是存储第一个插入的值
  • 你能展示你的购买模式、账单产品和项目清单吗?
  • 在我做一个像你这样的模拟之后,我可以将数组中的 20 个值数据提交给 Purchases、BillProducts 和 ItemLists。您的 Item_list 的模型名称与 ItemList 不同,将 class Item_list extends Model 重命名为 class ItemList extends Model
猜你喜欢
  • 2020-12-03
  • 2023-03-14
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
  • 2019-04-27
  • 2021-05-31
  • 1970-01-01
  • 2017-11-20
相关资源
最近更新 更多