【发布时间】:2018-10-23 05:44:43
【问题描述】:
我有原始查询:
INSERT INTO employee (fk_country_id, employee_id, fk_city_id, password, role, email, joined_at, resigned_at, created_at, updated_at) VALUES (?, ?, (SELECT id FROM city WHERE city.id = ?), ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE email = VALUES(email), joined_at = VALUES(joined_at), resigned_at = VALUES(resigned_at)
我正在执行这样的查询:
DB::insert($query, $parameters);
其中参数的值是数组的形式。
由于 INSERT 和 UPDATE 操作有大量行,我需要优化查询以在单个查询中插入多行的值。
如何在 Laravel 的帮助下优化我的查询?
有一些选项允许使用嵌套数组运行查询,但我无法使用:
DB::insert();
我想避免在 INSERT 操作期间使用“(?, ?, ?), (?, ?, ?)....”。 Laravel 如何促进这类事情以使代码看起来更干净和优化?
【问题讨论】:
-
我没有正确理解你的问题,但是让自己成为一个数组
$data = ['column' => 'value, ...], ..]并使用Model::insert($data) -
我不能使用 Model::insert($data),我需要对插入使用原始查询(使用 DB::insert()),因为查询中有嵌套选择并且 ON DUPLICATE KEY更新部分。所以我基本上是在询问是否支持对原始查询进行批量分配,并且我所说的原始是指原始而不是使用 eloquent 的某种部分原始查询。
-
@JonasStaudenmeir 看起来非常好,唯一的问题是我将内部选择查询作为值之一,我认为他们不支持它,但我会尝试
-
您找到解决方案了吗?
标签: mysql laravel mass-assignment