В эту таблицу постоянно вносятся данные, а потом выводятся последнии по дате внесения максимум по 500 записей с одинаковыми значениями в поле vid
Логично, что записи за пределами выборки из 500 уже не пригодятся.
Как сделать так, что если записей с одинаковым vid больше 500, то удалить лишние по дате более старые?
Вероятно, take тут не нужен. Вы уже задали offset - выходит, в предикают попадают все оставшиеся записи. Более того, Вы берете count по всей таблице, а не только по данному $vid.
Mikhail Osher: На счет count опечатка, добавил where. А на счет take не совсем ясно... Именно в Laravel skip работает вместе с take, я сначало тоже думал, что без него получится...
Есть множество решений, вот в качестве примера одно из них:
1) С помощью count и group by получаем список vid - количество, где количество более 500
2) Проходимся по массиву vid, выполяем запрос удаления с лимитом, и сортировкой по дате.