UpdateOrCreate模型对象

时间:2017-12-09 20:14:52

标签: php laravel laravel-5

我正在使用Laravel 5.5,我正在声明我的模型对象:

        $product = new product();
        $product->name = $coinArr[$key];
        $product->symbol = $symbolArr[$key];
        $product->current_price = $priceArr[$key];

        ///save image to public folder
        $fileName = basename($imgArr[$key]);
        Image::make($imgArr[$key])->save(public_path('images/' . $fileName));           
        $product->asset_logo = $fileName;
        //$product->updateOrCreate();
        App/Product::updateOrCreate($product);

如果数据库中不存在product,我想创建它,否则只需更新它。

我尝试了以下两种方法来使用updateOrCreate方法。但是,我收到App/Product::updateOrCreate($product);的以下错误:

  Type error: Too few arguments to function Illuminate\Database\Eloquent\Builder::updateOrCreate(), 0 passed in C:\Users\admin\Desktop\Coding Projects\laravel_proj\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php on line 1455 and at least 1 expected

以及$product->updateOrCreate();的错误:

Type error: Too few arguments to function Illuminate\Database\Eloquent\Builder::updateOrCreate()

有关如何将updateOrCreate与我的模型对象一起使用的任何建议吗?

感谢您的回复!

2 个答案:

答案 0 :(得分:3)

使用updateOrCreate时,需要选择用于确定产品是否已存在的属性。该函数需要2个数组:

product::updateOrCreate([
  'name' => $coinArr[$key]  //Laravel will check if this model exists by name
],[
  'symbol' => $symbolArr[$key]  //if exists, will update symbol.  if doesnt exist, will create new with this name and symbol
]);

答案 1 :(得分:0)

这不是updateOrCreate()方法的工作方式。在第一个参数中,您放置了一个包含搜索条件的数组。例如,如果要按名称搜索现有路径,则正确的语法为:

Product::updateOrCreate(
    [
         'name' => $coinArr[$key]
    ],
    [
        'symbol' => $symbolArr[$key],
        'current_price' => $symbolArr[$key],
        'asset_logo' => $fileName
    ]
);

第二个参数是用于创建新对象的数组。

https://laravel.com/docs/5.5/eloquent#other-creation-methods