I have a table: settings with the model Setting
class Setting extends Model
{
protected $fillable = [
'name', 'value',
];
}
I have created a service provide SettingsServiceProvider
and registered in app.php
class SettingsServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot(Factory $cache, Setting $settings)
{
if (\Schema::hasTable('settings')) {
config()->set('settings', Setting::pluck('value', 'name')->all());
}
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
}
}
After adding the name
and value
to the table settings
, I am calling it in the view like this:
{{ config('settings.sitename') }}
Where sitename
is the name
field which returns the value perfectly.
Problem: The problem with this method is that with every page request makes a DB call. And as these settings are not meant to be changed frequently, so I was looking for a method to cache it in the laravel cache.
I tried the following:
class SettingsServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot(Factory $cache, Setting $settings)
{
$settings = $cache->remember('settings', 60, function() use ($settings)
{
return $settings->pluck('name', 'value')->all();
});
config()->set('settings', $settings);
/* if (\Schema::hasTable('settings')) {
config()->set('settings', Setting::pluck('value', 'name')->all());
} */
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
But when I try to return it to the view like this:
{{ config('settings.sitename') }}
nothing gets return.
In command prompt, just type
OR
Thank you.
I don't have enough reputation to comment on the post but this should solve it
Replace:
With:
and then with the usual: