with(['user' => function (BelongsTo $belongsTo) { $belongsTo->withSum('images', 'size'); }, 'album', 'group', 'strategy'])->when($request->input('keywords'), function (Builder $builder, $keywords) { $words = []; $qualifiers = [ 'name:', 'album:', 'group:', 'strategy:', 'email:', 'extension:', 'md5:', 'sha1:', 'ip:', 'is:', 'order:', ]; collect(array_filter(explode(' ', $keywords)))->filter(function ($keyword) use ($qualifiers, &$words) { if (Str::startsWith($keyword, $qualifiers)) { return true; } $words[] = $keyword; return false; })->each(function ($filter) use ($builder) { match ($filter) { 'is:public' => $builder->where('permission', ImagePermission::Public), 'is:private' => $builder->where('permission', ImagePermission::Private), 'is:unhealthy' => $builder->where('is_unhealthy', 1), 'is:guest' => $builder->whereNull('user_id'), 'is:adminer' => $builder->whereHas('user', fn (Builder $builder) => $builder->where('is_adminer', 1)), 'order:earliest' => $builder->orderBy('created_at'), 'order:utmost' => $builder->orderBy('size'), 'order:least' => $builder->orderByDesc('size'), default => 0, }; [$qualifier, $value] = explode(':', $filter); if ($value) { $callback = fn (Builder $builder) => $builder->where('name', $value); match ($qualifier) { 'name' => $builder->whereHas('user', $callback), 'album' => $builder->whereHas('album', $callback), 'group' => $builder->whereHas('group', $callback), 'strategy' => $builder->whereHas('strategy', $callback), 'email' => $builder->whereHas('user', fn (Builder $builder) => $builder->where('email', $value)), 'extension' => $builder->where('extension', $value), 'md5' => $builder->where('md5', $value), 'sha1' => $builder->where('sha1', $value), 'ip' => $builder->where('ip', $value), default => 0 }; } }); foreach ($words as $word) { $builder->where('origin_name', 'like', "%{$word}%")->orWhere('alias_name', 'like', "%{$word}%"); } })->latest()->paginate(40); $images->getCollection()->each(function (Image $image) { $image->append('url', 'pathname'); $image->album?->setVisible(['name']); $image->group?->setVisible(['name']); $image->strategy?->setVisible(['name']); }); return view('admin.image.index', compact('images')); } public function update(): Response { return $this->success(); } public function delete(Request $request): Response { /** @var Image $image */ $image = Image::with('user', 'strategy', 'album')->find($request->route('id')); (new UserService())->deleteImages([$image->id]); return $this->success('删除成功'); } }