Skip to content

Return array - multiple result #54

Open

Description

@bgougent

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');

Activity

  1. benedict-tshaba commented on Jan 5, 2023

    @benedict-tshaba

    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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions