Saturday, March 7, 2015

Re: Still having trouble with saving BelongsToMany data

Kevin,

i'm so grateful for all your effort & ideas. i don't fully grasp conditional validation yet, though i suspect i will have to address that sooner or later. When i re-baked the models, ->requirePresence('field_name', 'create') is already set by default in AttributesTable, so that got me nowhere.

i also tried making a one-stop association like so:
<input type="checkbox" name="listings_attributes[3][attribute_id]" value="1">
<input type="text" name="listings_attributes[3][value]"> <!-- Off-street -->

Then in the Controller:
$listing = $this->Listings->patchEntity($listing, $this->request->data, ['associated' => ['ListingsAttributes']]);

It didn't produce any entity errors, but it didn't save the ListingsAttributes record, either. The data never makes it to the entity.

What i ultimately had to do (though it feels really dirty) was your initial suggestion: add all the attribute fields as hidden inputs. However, that added another problem: ALL the attributes were being submitted because the hidden fields were enabled for POSTing. So i had to tweak the Javascript that presents a text input for the join data (value) to also toggle the [disabled] property of all the hidden inputs for a given Attribute check box.

i'm FINALLY getting data in the ListingsAttributes table. i'm not a fan of doing it this way, but i'll have to live with it for now.

i really think there should be an option to tell the ORM to stop the save at the join table, rather than always trying to update the linked record in the associated table. If there is a way to do this with the ORM's save options, it doesn't appear to be documented. Obviously, i followed the documentation to the letter, but my assumption of its behavior was wrong.

Thanks again!
-joe


On Saturday, 7 March 2015 13:21:56 UTC-5, heavyKevy wrote:
I thought of one more option...

You can specify a separate validation specifically for adding the listing attributes such that the usual validation continues to be used and work as it was and the new validation works only for this instance.   The documentation has all of the information on how to do this should you decide to choose this option...

--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

---
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cake-php+unsubscribe@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.

No comments: