在laravel中使用request->all保存所有记录

bmp9r5qi  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(302)

laravel为开发人员保存一个表单的所有输入字段提供了很大的帮助,这个表单是一条记录和一行代码。
例如,如果我想将一个包含多个输入字段和一条记录的窗体保存到数据库中,例如:

然后我可以用下面的代码保存它,效果非常好:

SaveOrder:: create($request->all());

现在我有个问题。如果我在一个窗体中有多个记录(多行),并且我可以通过按下按钮添加新行。那么我如何用上述代码保存所有记录呢?
比如:

khbbv19g

khbbv19g1#

使用雄辩的语言很容易做到:

$data = array(
    array('field1'=>'value1', 'field2'=> value2),
    array('field1'=>'value1', 'field2'=> value1),
    //...
);

Model::insert($data);
vuktfyat

vuktfyat2#

这个问题的最佳答案是使用 foreach 声明。比如:

$CustomerName= $request -> input('CustomerName');
    $ProductId= $request -> input('ProductId');
    $ProductName= $request -> input('ProductName');
    $ProductColor= $request -> input('ProductColor');

    foreach( $ProductId as $key => $n ) {
        SaveOrder::insert(
                    array(
                        'CustomerName' => $CustomerName[$key],
                        'ProductId' => $ProductId[$key],
                        'ProductName' => $ProductPrice[$key],
                        'ProductColor' => $ProductQuantity[$key],
                    )
                    );}
zc0qhyus

zc0qhyus3#

假设你输入的名字看起来像 name[] ,因为可以动态添加行,所以可以将输入检索为数组,并使用如下方式插入:

$data = [];

$names = request('name');
$product_names = request('product_name');
$product_colour = request('product_colour');
$product_size = request('product_size');

for ($i = 0; $i < count($names); $i++) {
    // Add checks to make sure indices actually exist, probably using preprocessing in JS
    $data[] = [
        'name' => $names[$i],
        'product_name' => $product_names[$i],
        'product_colour' => $product_colour[$i],
        'product_size' => $product_size[$i],
    ];
}

Model::insert($data);

相关问题