Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Return array - multiple result #54

Open
bgougent opened this issue Jan 2, 2023 · 1 comment
Open

Return array - multiple result #54

bgougent opened this issue Jan 2, 2023 · 1 comment

Comments

@bgougent
Copy link

bgougent commented Jan 2, 2023

It is possible to get multiple values or an array as result?
e.g. - see code
Get all the settings from a specific key (App.theme) : setting()->get('App.theme','')
Get all the settings form a specific context : setting()->get('
','user1')
Get all the settings from a specific class : setting()->get('Log')

        $br='<br/>';

        service('settings')->set('App.theme', 'dark', 'user1');
        service('settings')->set('App.theme', 'white', 'user2');
        service('settings')->set('App.theme', 'red', 'user3');
        echo setting()->get('App.theme', 'user1').$br;
        echo setting()->get('App.theme', 'user2').$br;
        echo setting()->get('App.theme', 'user3').$br;
        print_r(setting()->get('App.theme','*')).$br;
        print_r(setting()->get('*','user1')).$br;

        service('settings')->set('Log.location', 'site/log');
        service('settings')->set('Log.date', '20220102');
        service('settings')->set('Log.name', 'service');
        echo setting()->get('Log.location').$br;
        echo setting()->get('Log.date').$br;
        echo setting()->get('Log.name').$br;
        print_r (setting()->get('Log')).$br;

Sample database

-- Dumping structure for table ca70_assets.da_settings
CREATE TABLE IF NOT EXISTS `da_settings` (
  `class` varchar(255) COLLATE armscii8_bin DEFAULT NULL,
  `key` varchar(255) COLLATE armscii8_bin DEFAULT NULL,
  `type` varchar(31) COLLATE armscii8_bin DEFAULT NULL,
  `context` varchar(255) COLLATE armscii8_bin DEFAULT NULL,
  `value` text COLLATE armscii8_bin DEFAULT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=armscii8 COLLATE=armscii8_bin;

-- Dumping data for table ca70_assets.da_settings: ~11 rows (approximately)
INSERT INTO `da_settings` (`class`, `key`, `type`, `context`, `value`, `created_at`, `updated_at`) VALUES
	('Config\\App', 'theme', 'string', 'user1', 'dark', '2023-01-02 16:10:06', '2023-01-02 16:14:10'),
	('Config\\App', 'theme', 'string', 'user2', 'white', '2023-01-02 16:10:06', '2023-01-02 16:14:10'),
	('Config\\App', 'theme', 'string', 'user3', 'red', '2023-01-02 16:10:06', '2023-01-02 16:14:10'),
	('Log', 'location', 'string', NULL, 'site/log', '2023-01-02 16:13:08', '2023-01-02 16:14:10'),
	('Log', 'date', 'string', NULL, '20220102', '2023-01-02 16:13:08', '2023-01-02 16:14:10'),
	('Log', 'name', 'string', NULL, 'service', '2023-01-02 16:13:08', '2023-01-02 16:14:10');
@benedict-tshaba
Copy link

benedict-tshaba commented Jan 5, 2023

Hi @bgougent,

Get all the settings from a specific key (App.theme)

This is already possible.

Get all the settings form a specific context : setting()->get('','user1')

This is not possible, also we don't have an index on the context column, so we would hit performance issues at scale. And the column is 255 which might be too big to index for some DBs.
But I don't see the benefit of being able to retrieve all settings for a specific context, maybe clarify your use case a bit?

Get all the settings from a specific class : setting()->get('Log')

currently it won't be possible to get all the settings for a specific class. I do believe though that this request is similar to what was suggested in #8 so depending on what the decision is on that issue, we might get something that will work for this.

That being said, it is possible to store an array as a setting and retrieve it using the following:

 setting()->set('MyAppConfig.testArray', [1,2,3,4,5]);
 setting()->get('MyAppConfig.testArray')

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants