Laravelのバージョンが5になってから、グローバルスコープを持つ変数の設定は、.envとconfig/のディレクトリの設定ファイルで、実用的しかも綺麗にまとまりました。変数の使用も、config('app.url')と、プログラムのでどこでも簡単に取得できます。
また、DBの設定などのデフォルト設定ファイル以外にも、独自の設定ファイルも作成できます。
例えば、
config/local.phpというファイルを作成して、
return [
        'convert' => '/usr/bin/convert', // 画像変換のプログラムのパス名
        'items_per_page' => 50,          // 1ページのアイテム数
        'max_upload_size' => 20,         // 最大アップロードの画像サイズ(MB)
        'company' => env('LOCAL_COMPANY', 'Lots of Bytes'), // 会社名
];
とすれば、config('local.company')と参照できます。
しかし、これらのグローバル変数設定の問題は、プログラムとして設定ファイルあるいは.envでハードコードしなければならないことです。
グローバル変数をDBに値を保存して、管理画面で以下のように値を編集できて、プログラムの各所で使用できるようにするには、どうしたらよいのでしょうか?

幸いにも、config()の関数は、取得だけでなく書き込みも可能なのです。
config(['global.admin_email' => 'abc@gmail.com']);
というように実行すれば、config('global.admin')でabc@gmail.comを返すことができます。
global.とプリフィックスしたのは、単に他の変数と区別やグループ分けがしたいがためです。
ということは、DBからデータを読んでプログラムの実行時の最初に、configして入れしまえば良いわけです。
このための適切な場所は、プログラムの初期に実行される、app/Providers/AppServiceProvider.phpの中です。
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use DB;
class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
	$setting = DB::table('setting')->pluck('value', 'key');
	config(['setting' => $setting]);        
    }
...
}
DBテーブルsettingの中身は、以下とすると、
+------------+---------------------+---------------------+------------------+-------------------+ | setting_id | created_at | updated_at | key | value | +------------+---------------------+---------------------+------------------+-------------------+ | 1 | 2016-12-03 01:09:51 | 2016-12-03 01:09:51 | email_admin | admin@gmail.com | | 2 | 2016-12-03 01:09:51 | 2016-12-03 01:09:51 | email_from | from@gmail.com | | 3 | 2016-12-03 01:09:51 | 2016-12-03 01:09:51 | site_name | ララジャパン | +------------+---------------------+---------------------+------------------+-------------------+
例えば、config('setting.site_name')の実行では、ララジャパンの値が返ってきます。
