У меня есть приложение laravel, которое работает в течение 2,5 лет на размещенном сайте. Сегодня поле автозаполнения начало генерировать исключение для Connection.php
> SQLSTATE[42S22]: Column not found: 1054 Unknown column
> 'venues.details' in 'order clause'
Запрос:
SELECT *
FROM
(SELECT `venues`.*,
`a`.`street_number`,
`a`.`longitude`,
`a`.`latitude`,
`p`.`code` AS `postal_code`,
`s`.`name` AS `street`,
`c`.`name` AS `city`,
`st`.`name` AS `state`,
`co`.`name` AS `country`,
`co`.`sortname` AS `sortname`,
`t`.`name` AS `timeZone`,
`t`.`zone` AS `timeZoneName`,
CONCAT(street_number, ' ', s.name, ' ', c.name, ', ', st.name, ', ', co.name) COLLATE utf8_bin AS address,
CONCAT(venues.name, ' ', street_number, ' ', s.name, ', ', c.name, ', ', st.name, ', ', co.name) COLLATE utf8_bin AS details
FROM `venues`
INNER JOIN `addresses` AS `a` ON `a`.`id` = `address_id`
INNER JOIN `streets` AS `s` ON `s`.`id` = `a`.`street_id`
INNER JOIN `postalcodes` AS `p` ON `p`.`id` = `a`.`postalcode_id`
INNER JOIN `cities` AS `c` ON `c`.`id` = `p`.`city_id`
INNER JOIN `states` AS `st` ON `st`.`id` = `c`.`state_id`
INNER JOIN `countries` AS `co` ON `co`.`id` = `st`.`country_id`
INNER JOIN `timezones` AS `t` ON `t`.`id` = `a`.`timezone_id`
WHERE `venues`.`deleted_at` IS NULL) AS venues
ORDER BY venues.details
LIMIT 15
OFFSET 0)
Если я запускаю этот запрос на консоли mysql, он работает так, как я ожидал. Я не менял (laravel) приложение или базу данных более года. Хостинг говорит, что ничего не изменилось.
Мне удалось заставить его работать, закомментировав сортировку:
$collate = ''; //, $collate = ' COLLATE utf8_bin ASC'
$results = $builder
//->orderByRaw($column . $collate)
->paginate();
Но я не могу понять, почему это не удается, но ручной запуск запроса работает(и что он отлично работал в течение 2 лет).