我正在使用PHP 7.1.33
和Laravel Framework 5.8.36
。
我正在从数据库row-by-row
接收数据,并且正在使用如下所示updateOrCreate()
创建一个模型:
foreach ($arr as $v) {
$product = new Product();
$product->name = $v['name'];
$product->url = $v['url'];
$product->price = $v['price'];
// save
$matchThese = ['name' => $name, 'url' => $url];
$product->updateOrCreate($matchThese);
}
但是,不会创建任何内容。
有什么建议我做错了什么吗?
感谢您的回复!
updateOrCreate
需要2个参数($attributes
,$values
(。
$attributes
是一个包含键值对的数组,基本上将用于 where 子句,即它将检查数据库中传递的属性。
$values
是一个数组,其中包含要在数据库中更新的内容的键值对。
如果它在数据库中找不到与第一个数组匹配的行,它将合并数组中的值以创建新行。
要实现你所追求的目标,你可以做到:
Product::updateOrCreate(
['name' => $v['name'], 'url' => $v['url']],
['price' => $v['price']]
);
试试这种方式
Product::updateOrCreate(
['name' => $name, 'url' => $url],
['price' => v['price']],
)
第一个参数用于搜索寄存器。 第二个参数设置新值。
有关更多信息,您可以阅读雄辩:入门 - 文档