Идиорм найти много() возвращает только один объект


Я играю с 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();

Кто-нибудь знает, почему это так?

 5
Author: risingfish, 2013-09-18

1 answers

После исследования; может показаться, что либо в вашей таблице отсутствует столбец id, либо ваш столбец id не содержит уникальных значений, либо вы настроили Idiorm для использования недопустимого столбца вместо id.

Идиорм перебирает возвращенные строки и присваивает их массиву, используя значение id в качестве индекса/ключа. Если значение id отсутствует, то возвращается только последний результат. Если у вас есть столбец id, содержащий повторяющиеся значения, то вы получите меньше результатов чем вы должны, так как дубликаты будут перезаписывать предыдущие ключи в массиве.

Вы можете ознакомиться с более подробной информацией об ошибке на github, а также с предлагаемыми изменениями.

 4
Author: michaelward82, 2013-10-02 09:44:08