我正在使用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
与我的模型对象一起使用的任何建议吗?
感谢您的回复!
答案 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