Mysql 用于原始查询的Laravel mass insert

Mysql 用于原始查询的Laravel mass insert,mysql,laravel,mass-assignment,Mysql,Laravel,Mass Assignment,我有一个原始的疑问: 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

我有一个原始的疑问:

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();

我希望避免在插入操作期间使用“(?,?,?),(?,?,?)…”。Laravel如何促进这类工作,使代码看起来更干净、更优化?

您可以使用Laravel优化代码:

DB::insert('insert into users (id, name) values (?, ?)', array(1, 'Dayle'));
你也可以通过这个链接。这对你有帮助


如果符合您的解决方案,请将其标记为答案。

对于原始批次插入,您可以使用:

DB::unprepared("
    insert into users (email, votes) values ('john@mail.com', 10);
    insert into users (email, votes) values ('jane@mail.com', 12);
");
小心SQL注入


在测试中快速填充数据库时,这可能非常有用。

我没有正确地理解您的问题,但将自己设置为一个数组
$data=['column'=>'value,…],…]
并使用
Model::insert($data)
我不能使用Model::insert($data),我需要使用原始查询进行插入(使用DB::insert()),因为在查询和重复密钥更新部件上有嵌套的select。所以我基本上是在问是否有对原始查询的大规模分配的支持,我所说的“原始”实际上是指“原始”而不是某种使用eloquent的部分原始查询。看看这个:@JonasStaudenmeir看起来真的很好,唯一的问题是我将内部选择查询作为一个值,我认为他们不支持,但我会尝试给你一个解决方案?我知道这个解决方案,但我问的是大规模插入,即…插入值(?,,(?,?)。。。然后[[1,'Dayle'],[2,'Minie']]一些方法支持这一点,但不支持DB::insert afaikPlease为您的答案添加一些解释-对我来说,给定的查询与问题中的查询非常相似。