select('locale_name', 'vnum') ->when($request->query('query'), fn ($q, $term) => $q->where('locale_name', 'like', "%$term%")) ->take(10) ->get() ); } public function show(ItemProto $item) { if ($item->type->isUpgradeable()) { $baseName = str($item->locale_name) ->beforeLast('+'); $items = ItemProto::select($this->itemColumns) ->where('locale_name', 'like', "$baseName%") ->orderBy('vnum', 'asc') ->with([ 'refineSet', 'refineSet.item0' => fn ($q) => $q->select(['vnum', 'locale_name']), 'refineSet.item1' => fn ($q) => $q->select(['vnum', 'locale_name']), 'refineSet.item2' => fn ($q) => $q->select(['vnum', 'locale_name']), 'refineSet.item3' => fn ($q) => $q->select(['vnum', 'locale_name']), 'refineSet.item4' => fn ($q) => $q->select(['vnum', 'locale_name']), 'sellers.mob', ]) ->get(); if ($items->first()->vnum) { $from = ItemProto::select($this->itemColumns) ->whereRefinedVnum($items->first()->vnum) // ->where('refine_set', '!=', 0) ->first(); if ($from) { $items->prepend($from); } } if (($last = $items->last())->refined_vnum && $last->refine_set !== 0) { $to = ItemProto::select($this->itemColumns) ->whereVnum($items->last()->refined_vnum) ->first(); if ($to) { $items->push($to); } } return [ 'items' => ItemProtoResource::collection($items), 'sources' => [ 'shops' => ItemProtoShopResource::collection( $items ->flatMap(fn ($item) => $item->sellers) ->unique(fn ($seller) => $seller->vnum) ), ], ]; } return new ItemProtoResource( $item->loadMissing([ 'sellers.mob', ]) ); } }