2013-09-18 5 views
4

Я играю с идиомом в течение нескольких дней и мало-по-разному сумел заставить его фактически начать выполнять запросы. Однако я сталкиваюсь с чем-то странным, и я не могу понять. Функция find_many() возвращает только одну запись, и она всегда является последней записью в базе данных. Например, я сделать следующий запрос через MySQLi и я получаю все 16 пользователей в моей базе данных:Idiorm find_many() возвращает только один объект

// 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(); 

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

ответ

3

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

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

Вы можете увидеть больше на github bug, а также предлагаемые изменения.

+0

Этот вопрос заставил меня буквально кричать от разочарования. Я думаю, вероятно, это соглашение о том, что первые столбцы в таблице нужно называть просто «id», следует упомянуть очень рано в документации. –

+0

Для людей, которые не хотят просматривать описание ошибки, решение может состоять в том, чтобы изменить имя столбца id на id OR, чтобы указать имя столбца, используя параметр id_column_overrides, например: ORM :: configure ('id_column_overrides', массив ( 'customer' => 'customer_id', )); – adosaiguas

Смежные вопросы