Используйте в основном коде и тестах только config().
Это связано с тем, что у вас в приложении всегда должен быть только одни источник данных.
Простой пример из дефолтной сборки Laravel. В app.php есть строка:
'name' => env('APP_NAME', 'Laravel'),
Самое просто, что вы можете сделать, это вызвать
config('app.name')
где-нибудь в коде, чтобы получить данные из этой настройки. Вот только если вы вызовите
env('APP_NAME')
вы, возможно, получите ошибку, в случае, если эта переменная не задана в переменных среды.
Но как вы видите из кода выше, она совершенно необязательно должна быть задана в переменных среды, так как для неё задано значение по умолчанию:
Laravel. А значения в конфиге могут быть вообще самой разной степени извращённости. И они могут составляться из частей. Например:
'endpoint' => 'https://' . env('API_DOMAIN') . '/some/subroute',
Это банальный и простой пример. Но на большой проекте с массой переменных и настроек вы однозначно столкнётесь с трудностями такого рода.
Ваша задача сделать код удобным и читаемым. Чтобы будущие программисты могли распутать макаронину, что вы сплели. А разнообразие источников данных только запутает читателя.