我得到有关5万多种产品的json编码信息。任务是将所有这些产品传输到数据库。在这种情况下,如果存在具有当前ID的产品-应该简单地输入有关其的数据,否则-创建产品。
为此,我使用了foreach
循环和updateOrCreate
Laravel函数。
像这样:
$products = json_decode($jsonDecodedProducts, true);
foreach ($products as $product)
{
Products::updateOrCreate(
[ 'products_id' => $product['products_id'] ],
[
'product_name' => $product['products_name'],
]
);
}
但是它工作很慢。 Laravel是否提供任何加速此任务的方法?
答案 0 :(得分:0)
由于(例如)魔术方法和属性功能的原因,Laravel的Eloquent ORM在构造上相当慢。我的建议是通过使用DB
门面构建原始查询来绕过这些过程。
此外,您可以将所有需要插入的行保存到数组中,然后批量插入。
答案 1 :(得分:0)
ORM仍然不是最快的解决方案,请尝试使用自定义sql查询编写它。
这里是有关类似https://laracasts.com/discuss/channels/eloquent/performant-way-to-mass-update-or-create
的讨论