Laravel 使用查询生成器更新插入操作
Laravel upsert operations with Query Builder
在我的一个基于某些指标存储聚合计数的工作脚本中,我没有使用 Eloquent,因为查询有点复杂,而且使用查询生成器很容易编写。我目前正在从数据库中获取值,我需要在数据库中 insert/update 它。使用 save() 方法是否可以使用 Query Builder 实现更新插入操作?还是我每次都需要检查这个条目是否在数据库中?
我总共有 100,000 个条目,我想 运行 将其作为日常工作。因此,如果我需要检查数据库中是否存在特定条目,我需要多次访问数据库。是否有替代解决方案?
我正在考虑创建两个模型 类,一个使用 Eloquent,一个使用查询生成器。我可以在 Eloquent 模型中使用自定义查询吗?
Eloquent 有 updateOrCreate()
方法可以让你做你想做的事。但是Query Builder没有类似的方法。
您可以使用查询生成器构建原始查询并使用 INSERT ... ON DUPLICATE KEY UPDATE 作为更新插入解决方案。
Eloquent 有一个名为 updateOrCreate
的方法,可以像这个例子一样使用:
<?
$flight = Flight::updateOrCreate(
[
'code' => '156787',
'destination' => 'COL'
],
[
'code' => '156787',
'destination' => 'COL',
'price' => 99,
'discounted' => 1,
],
);
- 按
code
和 destination
搜索可以最好地识别您的行。
- 它根据第二个数组中给定的值创建或更新。
下面是方法的符号
/**
* Create or update a record matching the attributes, and fill it with values.
*
* @param array $attributes
* @param array $values
* @return \Illuminate\Database\Eloquent\Model
*/
public function updateOrCreate(array $attributes, array $values = [])
现在(2020 年 10 月 6 日),Laravel(v8.10.0) 具有本机 upsert
支持。 https://github.com/laravel/framework/pull/34698
DB::table('users')->upsert([
['id' => 1, 'email' => 'taylor@example.com'],
['id' => 2, 'email' => 'dayle@example.com'],
], 'email');
在我的一个基于某些指标存储聚合计数的工作脚本中,我没有使用 Eloquent,因为查询有点复杂,而且使用查询生成器很容易编写。我目前正在从数据库中获取值,我需要在数据库中 insert/update 它。使用 save() 方法是否可以使用 Query Builder 实现更新插入操作?还是我每次都需要检查这个条目是否在数据库中?
我总共有 100,000 个条目,我想 运行 将其作为日常工作。因此,如果我需要检查数据库中是否存在特定条目,我需要多次访问数据库。是否有替代解决方案?
我正在考虑创建两个模型 类,一个使用 Eloquent,一个使用查询生成器。我可以在 Eloquent 模型中使用自定义查询吗?
Eloquent 有 updateOrCreate()
方法可以让你做你想做的事。但是Query Builder没有类似的方法。
您可以使用查询生成器构建原始查询并使用 INSERT ... ON DUPLICATE KEY UPDATE 作为更新插入解决方案。
Eloquent 有一个名为 updateOrCreate
的方法,可以像这个例子一样使用:
<?
$flight = Flight::updateOrCreate(
[
'code' => '156787',
'destination' => 'COL'
],
[
'code' => '156787',
'destination' => 'COL',
'price' => 99,
'discounted' => 1,
],
);
- 按
code
和destination
搜索可以最好地识别您的行。 - 它根据第二个数组中给定的值创建或更新。
下面是方法的符号
/**
* Create or update a record matching the attributes, and fill it with values.
*
* @param array $attributes
* @param array $values
* @return \Illuminate\Database\Eloquent\Model
*/
public function updateOrCreate(array $attributes, array $values = [])
现在(2020 年 10 月 6 日),Laravel(v8.10.0) 具有本机 upsert
支持。 https://github.com/laravel/framework/pull/34698
DB::table('users')->upsert([
['id' => 1, 'email' => 'taylor@example.com'],
['id' => 2, 'email' => 'dayle@example.com'],
], 'email');