Files
lsky-pro/app/Services/UserService.php
T
2022-02-18 11:47:54 +08:00

48 lines
1.4 KiB
PHP

<?php
namespace App\Services;
use App\Models\Image;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
class UserService
{
/**
* 删除图片以及物理文件,返回已删除数量
* 考虑到删除磁盘文件、服务器内部请求第三方删除接口比较消耗资源,传入的主键不应过多
* TODO 改进循环中更新数据
*
* @param array $keys
* @param User|null $user 传入用户数据则会根据用户id过滤
* @return int
*/
public function deleteImages(array $keys, ?User $user = null): int
{
$count = 0;
$model = Image::with('user', 'strategy', 'album')->when(! is_null($user), function (Builder $builder) use ($user) {
$builder->where('user_id', $user->id);
})->whereIn('id', $keys);
DB::transaction(function () use ($model, $keys, &$count) {
/** @var Image $image */
foreach ($model->cursor() as $image) {
// 相册图片数量更新
$image->album?->decrement('image_num');
// 更新相册图片数量
$image->delete();
// 更新数量
if ($image->user) {
$image->user->image_num = $image->user->images()->count();
$image->user->save();
}
$count++;
}
});
return $count;
}
}