. */ declare(strict_types=1); namespace FireflyIII\Repositories\Administration\Account; use FireflyIII\Support\Repositories\Administration\AdministrationTrait; use Illuminate\Support\Collection; /** * Class AccountRepository */ class AccountRepository implements AccountRepositoryInterface { use AdministrationTrait; /** * @inheritDoc */ public function searchAccount(string $query, array $types, int $limit): Collection { // search by group, not by user $dbQuery = $this->userGroup->accounts() ->where('active', true) ->orderBy('accounts.order', 'ASC') ->orderBy('accounts.account_type_id', 'ASC') ->orderBy('accounts.name', 'ASC') ->with(['accountType']); if ('' !== $query) { // split query on spaces just in case: $parts = explode(' ', $query); foreach ($parts as $part) { $search = sprintf('%%%s%%', $part); $dbQuery->where('name', 'LIKE', $search); } } if (0 !== count($types)) { $dbQuery->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id'); $dbQuery->whereIn('account_types.type', $types); } return $dbQuery->take($limit)->get(['accounts.*']); } }