Проблема как раз не в том, что чтение идет построчно, а в том, что оно сразу весь файл хочет превратить в структуру в памяти.
Можно воспользоваться чем-то типа
https://github.com/pcrov/JsonReader/wiki/JsonReader-API чтобы читать поэлементно и запихивать прочитанное в базу, без запихивания всего гигантского файла в память.
UPD: для того, чтобы сам laravel не переводил тело запроса в json - нужно указать в запросе на отправляющей стороне
Content-Type: text/plain
. После этого входящий поток можно получить через $request->getContent(true) и сделать с ним что надо - либо перенаправить в файл, чтобы потом обработать, либо сразу читать через JsonReader
чуть более долгая модификация отправляющей стороны - переделать запрос на multipart с передачей файла и обрабатывать
request->file()