У меня есть несколько циклов foreach, чтобы показать всех игроков в игре. В таблице 10 игроков, с столбцом id типа int, с автоматическим добавлением. Код выглядит следующим образом:Разный порядок сортировки Laravel Eloquent all() на разных серверах
foreach(Player::all() as $player) {
echo $player->id;
}
На моем разработчика Mac, MySQL 5.1.70, я получаю: 1 2 3 ... На моем прод сервере, MySQL 5.5.31, я получаю: 1 10 2 3 4 ....
Это согласуется в любом другом месте моего кода. Теперь я понимаю, что это алфавитно-цифровая сортировка. Вопрос в том, почему? Что я могу включить на сервере, чтобы он соответствовал моей машине dev, не выполняя больших изменений кода?
Я использую PHP 5.4, Apache 2.4, Laravel 4.0.5 с красноречивы
Update:
я нашел еще один симптом этого, который фактически может быть основной причиной проблемы: при анализе клиентские AJAX-вызовы на сервер, я обнаружил, что значения возвращаются как ints от сервера dev, но как строки из prod-сервера, что вызывает множество ошибок. Это объясняет, почему я получаю ASCII-сортировку. Но agai, вопрос в том, что мне нужно «исправить» на сервере prod, чтобы это работало?
Если вы не определили своего рода, вы получаете случайный сортировать, поскольку это, по-видимому, не имеет значения. Итак ... определите '-> orderBy()', если это так? – Wrikken
Прежде чем добавить -> orderBy() ко всем моим запросам, я хотел бы понять разницу в среде. Для меня это может быть более важным, чем фактическое разрешение локального вопроса - я могу столкнуться с другими подобными проблемами, связанными с свойством сервера. –
Это как я говорю: вы не указываете заказ, Laravel не указывает порядок, поэтому база данных будет получать значения в зависимости от того, какой порядок выглядит наиболее эффективным для него, что, скорее всего, связано с порядком в которые они были записаны на диске.Это, тем не менее, порядок первичного ключа, но это не гарантировано, если вы не укажете его. – Wrikken