Details

    • Type: New Feature New Feature
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Invalid
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: None
    • Labels:
      None

      Description

      I suggest adding a new feature called @DynamicFields. The idea is from roman and documeneted here: http://github.com/romanb/couchdb-persistence-api/blob/master/src/main/java/org/code_factory/couch/annotations/DynamicFields.java

      Idea: Save all "left-over" fields of the result in an array.

      This would greatly enhance the flexibility of document mappers

        Activity

        Hide
        Jonathan H. Wage added a comment -

        Nice idea! So something like this could essentially work:

        /** @Document */
        class User
        {
            /** @DynamicFields */
            public $data;
        }
        
        $user = $dm->find(....);
        echo $user->data['username'];
        

        I am not sure if it is a good idea to just allow them to use a single @DynamicFields, maybe we should throw an exception if they use it that way? Also, if they modify a value inside $data should we persist the changes?

        Show
        Jonathan H. Wage added a comment - Nice idea! So something like this could essentially work: /** @Document */ class User { /** @DynamicFields */ public $data; } $user = $dm->find(....); echo $user->data['username']; I am not sure if it is a good idea to just allow them to use a single @DynamicFields, maybe we should throw an exception if they use it that way? Also, if they modify a value inside $data should we persist the changes?
        Hide
        Benjamin Eberlei added a comment -

        i guess the semantics should be, just one dynamic fields per entity allowed and that is inlined into the "normal" fields using array_merge() ?

        Show
        Benjamin Eberlei added a comment - i guess the semantics should be, just one dynamic fields per entity allowed and that is inlined into the "normal" fields using array_merge() ?
        Hide
        Benjamin Eberlei added a comment -

        ok maybe array_merge() is a bit dangerous, when the dynamic field has a property named like a real property.

        But you could do $data = array_merge($dynamicData, $staticData); and should be fine then semantically, of course this should be documented

        I think you should have at least an ID or not? but something like this would even be very fast for prototyping:

        /** @Document */
        class User
        {
            /** @Id @Field */
            private $id;
        
            /** @DynamicFields */
            public $data;
        }
        
        Show
        Benjamin Eberlei added a comment - ok maybe array_merge() is a bit dangerous, when the dynamic field has a property named like a real property. But you could do $data = array_merge($dynamicData, $staticData); and should be fine then semantically, of course this should be documented I think you should have at least an ID or not? but something like this would even be very fast for prototyping: /** @Document */ class User { /** @Id @Field */ private $id; /** @DynamicFields */ public $data; }
        Hide
        Jonathan H. Wage added a comment -

        After thinking about it and discussing it I think the @Collection type can do what is needed:

        /** @Document */
        class User
        {
            /** @Id */
            private $id;
        
            /** @Collection */
            public $data = array();
        }
        
        Show
        Jonathan H. Wage added a comment - After thinking about it and discussing it I think the @Collection type can do what is needed: /** @Document */ class User { /** @Id */ private $id; /** @Collection */ public $data = array(); }

          People

          • Assignee:
            Jonathan H. Wage
            Reporter:
            Benjamin Eberlei
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: