I have a laravel app that's been working for 2.5 years on a hosted site. Today an auto complete field started generating an exception on Connection.php
> SQLSTATE[42S22]: Column not found: 1054 Unknown column
> 'venues.details' in 'order clause'
The query is:
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)
If I run that query on the mysql console it works as I expect. I haven't change the (laravel) app or the database in over a year. The hosting site say nothing has changed.
I managed to get it working by commenting out the sort:
$collate = ''; //, $collate = ' COLLATE utf8_bin ASC'
$results = $builder
//->orderByRaw($column . $collate)
->paginate();
But I can't think why it fails but manually running the query works (and that it's worked fine for 2+ years).