1. Когда вы собираетесь сравнивать запросы то стоит смотреть именно какие запросы на выходе получите а не какие методы будут использоваться. Скорее всего в Mysql whereDate превращается в какой нибудь date_format(`created_at`, '%Y-%m-%d') и следовательно если в MySQL не завезли индексов по вычисляемым полям - то индекс на created_at вам не поможет. во втором случае - поможет.
2. Когда вы собираетесь сравнивать запросы - стоит смотреть explain
Ну внезапно все браузеры честно сообщают о том что они в режиме автоматизации - window.navigator.webdriver. Есть еще миллион признаков распознать селениум. Большая часть из них вроде как решена в undetected chrome
select t.date, count(*) from (SELECT
min(time)::DATE as date,
user_id
FROM
user_actions
WHERE
action != 'cancel_order'
GROUP BY
user_id
) as t
group by date;
Kerm, потому что модели в ларке используют магические методы __set и __get для доступа к свойствам записи. Можете посмотреть trait HasAttributes что бы посмотреть как. Эти методы используются когда вы обращаетесь к свойствам объекта которые не объявлены и следовательно когда вы объявляете руками свойство это больше не работает. Теоретически можно переписать метод инициализации модели и сделать что бы он клал в свойства модели. Вопрос только нахрена?