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

Create a way to reuse the const in some query conditions. #37

Open
pmoraes opened this issue Sep 5, 2017 · 7 comments
Open

Create a way to reuse the const in some query conditions. #37

pmoraes opened this issue Sep 5, 2017 · 7 comments

Comments

@pmoraes
Copy link

pmoraes commented Sep 5, 2017

Currently we don't have this feature implemented. For now we need to take the list and use array_search to find the value to add in the conditions.

TODO: Create a way to reuse the const to create the query conditions.

@birdy247
Copy link

I am using the const strategy and have the following config set:

const OCCASION_TYPE_MASS_PARTICIPATION_EVENT = "mass_participation_event";
const OCCASION_TYPE_TRAINING_SESSION = "training_session";
const OCCASION_TYPE_SOCIAL = "social";

    $this->addBehavior('CakeDC/Enum.Enum', ['lists' => [
        'internal_type' => [
            'strategy' => 'const',
            'prefix' => 'OCCASION_TYPE',
            'className' => 'App\\Model\\Entity\\OccasionType',
            'applicationRules' => false
        ]
    ]]);

When I save an entity by allowing a user to select from a select list using the helper

$this->set('priorities', $this->Articles->enum('priority'));

this plugin would save MASS_PARTICIPATION_EVENT. This is ok, but it then makes it very hard to achieve the following:

1/ Query all records with a internal_type of MASS_PARTICIPATION_EVENT
2/ Manually assign the entities property with one of the constants

Previously I would do something like OccasionTypes::OCCASION_TYPE_MASS_PARTICIPATION_EVENT, but this will not work (as this would reference "mass_participation_event" (what I have previously been saving) .

I would still like to use OccasionTypes::OCCASION_TYPE_MASS_PARTICIPATION_EVENT, but maybe if this plugin could provide a method which returns the actual value it will use.

I hope this use case is clear

@ADmad
Copy link
Contributor

ADmad commented Sep 15, 2017

Use 'lowercase' => true in config and it will save mass_participation_event in db instead of MASS_PARTICIPATION_EVENT. 🙂

@birdy247
Copy link

Thanks @ADmad this works to some extent. I still have to disable the applicationRules to get it to save though.

Is the idea that the value of the constant should be the label to display in select lists etc...?

@ADmad
Copy link
Contributor

ADmad commented Sep 16, 2017

It should work with application rules enabled too. Do some digging and find out what's the problem.

@birdy247
Copy link

@ADmad I did some testing. I was saving multiple entities in a single transaction. Some of these had a a "null" for the enum value. I can see you already made a PR to allowEmpty.

That did the trick.

I still don't feel I am using the const strategy correctly though.

OCCASION_TYPE_MASS_PARTICIPATION_EVENT = "mass_participation_event"

Presumably the "mass_participation_event" is just a display label that I am now effectlivley using as the const value (when using this in a find query or manually setting the value of internal_type in any beforeSave etc...

Thanks

@pmoraes
Copy link
Author

pmoraes commented Oct 31, 2017

Hey @birdy247, I'll be starting to work on it today.

@ADmad we have this problem, lowercase and and disable the applicationRules won't solve that problem.

For example if you a const:

const OCCASION_TYPE_MASS_PARTICIPATION_EVENT = "Just a test";

and we are using lowercase, I'll save "mass_participation_event" and we won't able to find it in the database because we have other text.

@birdy247
Copy link

Hi @pmoraes Is there a branch for this fix? I am happy to help with the development.

Presumably, we just need a simple "lookup" function whereby you pass the constant and it returns the value that would normally be saved to the DB/added as the value in select lists?

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

3 participants