通过阅读Laravel Documentation,我知道updateOrInsert
接受两个参数,第一个是条件数组。对该数组进行一次比较,而不是一次比较-即,给定数组['name' => 'John', 'email' => 'contact@example.com']
时,它将首先用name == 'John'
检查一行,然后,如果找不到,它会寻找带有email == 'contact@example.com'
的行。
我想同时满足两个条件-即,只有具有name == 'John'
AND
email == 'contact@example.com'
的行才会更新
是否可以通过updateOrInsert函数执行此操作,还是我需要使用if语句和额外的调用来检查这两种情况?
答案 0 :(得分:3)
是的,您可以那样做,已经在文档中了
DB::table('users')
->updateOrInsert(
['email' => 'john@example.com', 'name' => 'John'],
['votes' => '2']
);
它将检查email == 'john@example.com'
和name == 'john'
,然后更新votes=2
。
答案 1 :(得分:0)
updateOrInsert
的行为应与您希望的一样。它采用的第一个参数是条件的连接数组。第二个参数是一个数组,用于与条件合并并使用其更新任何匹配的记录。
/**
* Insert or update a record matching the attributes, and fill it with values.
*
* @param array $attributes
* @param array $values
* @return bool
*/
public function updateOrInsert(array $attributes, array $values = [])
{
if (! $this->where($attributes)->exists()) {
return $this->insert(array_merge($attributes, $values));
}
if (empty($values)) {
return true;
}
return (bool) $this->take(1)->update($values);
}