protected function findByWhereClause($whereClause = '', $sorting = '', $limit = '')
    {
        $orderBy = '';

        $tca = \Tx_Oelib_Db::getTcaForTable($this->getTableName());
        if ($sorting !== '') {
            $orderBy = $sorting;
        } elseif (isset($tca['ctrl']['default_sortby'])) {
            $matches = [];
            if (preg_match(
                '/^ORDER BY (.+)$/',
                $tca['ctrl']['default_sortby'],
                $matches
            )) {
                $orderBy = $matches[1];
            }
        }

        $completeWhereClause = ($whereClause === '')
            ? ''
            : $whereClause . ' AND ';

        $rows = \Tx_Oelib_Db::selectMultiple(
            '*',
            $this->getTableName(),
            $completeWhereClause . $this->getUniversalWhereClause(),
            '',
            $orderBy,
            $limit
        );

        return $this->getListOfModels($rows);
    }