【发布时间】:2020-02-28 11:28:12
【问题描述】:
我制作了一种复制分支用户权限的方法。权限通常为 0 到 120 个项目。运行此方法将这个(0 到 120)项插入到 7 个 user_ids 需要 35-55 秒才能插入到表中。
/**
* Copy Branch User Permissions
*
* @param Int
* @param Int
* @param Int
* @return Array
*/
public function copyBranchUserPermissions($branchIdFrom, $branchIdTo, $userId)
{
$permissions = BranchPermissionUser::get()
->where('branch_id', $branchIdFrom)
->where('user_id', $userId);
foreach($permissions as $permission) {
$permission->create([
'branch_id' => $branchIdTo,
'permission_id' => $permission->permission_id,
'user_id' => $userId
]);
}
return $permissions;
}
我需要优化这个过程,因为插入数据的性能很慢。我在想如果超过 10 个用户怎么办,所以这个过程会花费太长时间。有什么办法可以提高插入数据的性能速度?
提前谢谢你!
【问题讨论】:
-
大概想看看Laravel Queues
-
我认为问题在于您获取权限列表,因为这将立即返回所有
BranchPermissionUser::get()。您需要将 get() 作为最后一个。 -
不是 Laravel 人,但我会认为像 Create a Insert… Select statement in Laravel 这样的东西是嵌套方式(基本上相当于 SQL INSERT...SELECT 语句)。
标签: php sql laravel optimization