【问题标题】:How can insert array of multiple inputs in database?如何在数据库中插入多个输入的数组?
【发布时间】:2019-11-29 12:08:45
【问题描述】:

我正在插入一个包含多个输入的数组。但是当我 dd 它或创建它时,它不会插入或返回任何值。在这种情况下如何使用创建?我是 laravel 的新手。

foreach ($data['sku'] as $key => $val) {


    $attrCountSKU = ProductsAttribute::where('sku', $val)->count();
    if ($attrCountSKU > 0) {
        return back()->with('error', 'SKU already exists for this product! Please input another SKU.');
    }

    $attrCountSizes = ProductsAttribute::where(['product_id' => $product->id, 'size' => $data['size'][$key]])->count();

    if ($attrCountSizes > 0) {
        return back()->with('error', 'Size already exists for this product! Please input another Size.');
    }


    $attribute = new ProductsAttribute;
    $attribute->product_id = $product->id;
    $attribute->sku = $val;
    $attribute->size = $data['size'][$key];


    $attribute->price = $data['price'][$key];
    $attribute->stock = $data['stock'][$key];

    dd($attribute);
    dd($attribute->create());
}

【问题讨论】:

  • 这是我上面的验证器 foreach $data = request()->validate([ 'sku.*' => 'required', 'price.*' => 'required', 'size.* ' => '必需', '库存.*' => '必需', ]);
  • 总是把你的代码放在问题中。你可以使用编辑链接来做到这一点。
  • 这超出了问题的范围,但是如果您在一个请求中添加多个项目,您应该考虑如果一个插入因任何原因失败可能会发生什么。将插入包装在事务中,并在任何失败时回滚它们,这可能是谨慎的做法,以确保在一个失败并重新提交数据时不会出现重复的实例。

标签: php laravel


【解决方案1】:

您应该使用$attribute->save() 方法而不是$attribute->create()

或者使用create() 方法,您可以这样做

$flight = ProductsAttribute::create(
    [
        'product_id' => $product->id,
        'sku' => $val,
        'size' => $data['size'][$key],
        'price' => $data['price'][$key],
        'stock' => $data['stock'][$key],            
    ]
);

【讨论】:

    【解决方案2】:

    您需要使用save() 方法保存模型。

    设置完所有属性后添加:

    $attribute->save();
    
    return $attribute->id // Will be set as the object has been inserted
    

    您也可以使用create() 方法一次性创建和插入模型:

    $attribute = ProductsAttribute::create([
        'product_id' => $product->id,
        'sku' => $val,
        'size' => $data['size'][$key],
        'price' => $data['price'][$key],
        'stock' => $data['stock'][$key],
    ]);
    

    Laravel 文档:https://laravel.com/docs/5.8/eloquent#inserting-and-updating-models

    【讨论】:

    • 因为我在模型上设置了受保护的可填充,如果我使用 create() 会有什么问题吗?
    • 你可以使用 create 并传递一个数组,只要它们都是可填充的。将更新我的答案。
    • 谢谢@atymic 我会等你的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 2014-12-02
    • 2018-12-29
    • 2017-04-03
    相关资源
    最近更新 更多