Идиорм найти много() возвращает только один объект
Я играю с idiorm уже несколько дней, и мало-помалу мне удалось заставить его действительно начать выполнять запросы. Хотя я сталкиваюсь с чем-то немного странным, и я не могу этого понять. Функция find_many() возвращает только одну запись, и это всегда последняя запись в базе данных. Например, я делаю следующий запрос через mysqli и получаю всех 16 пользователей в своей базе данных:
// connection is just a singleton instance to manage DB connections
$connection->getRawInstance()->getRawConnection()->query('select * from users'));
// The result of this is all 16 users
Теперь, когда я выполняю эквивалентный запрос в idiorm, я получаю только user16, последний в базе данных.
\ORM::configure('mysql:host=localhost;dbname=------');
\ORM::configure('username', '----');
\ORM::configure('password', '----');
\ORM::configure('logging', true);
$people = \ORM::forTable('users')->findMany();
Кто-нибудь знает, почему это так?
1 answers
После исследования; может показаться, что либо в вашей таблице отсутствует столбец id
, либо ваш столбец id
не содержит уникальных значений, либо вы настроили Idiorm для использования недопустимого столбца вместо id
.
Идиорм перебирает возвращенные строки и присваивает их массиву, используя значение id
в качестве индекса/ключа. Если значение id
отсутствует, то возвращается только последний результат. Если у вас есть столбец id
, содержащий повторяющиеся значения, то вы получите меньше результатов чем вы должны, так как дубликаты будут перезаписывать предыдущие ключи в массиве.
Вы можете ознакомиться с более подробной информацией об ошибке на github, а также с предлагаемыми изменениями.