i'm REALLY sorry for the delay getting back to you. And unfortunately, i'm still not there. It's CLOSE though:
i did exactly as you suggested in your last post. Set up my Entities & Tables just as you described. Set up the controller to manually set the _joinData "dirty" and called the save. i get the ListingsAttributes record now! But no value from the text input (_joinData.value). The POST data is correct: Array ( [attributes] => Array ( [3] => Array ( [id] => 1 [_joinData] => Array ( [value] => Off-street ) ) ) ) That's exactly what i've been getting since i change to use _joinData... Here's the Entity after merging & setting _joinData dirty: Array ( [attributes] => Array ( [0] => Array ( [id] => 1 ) ) ) As before, the "value" input got lost. However, there is FINALLY an Attributes array in the Listing entity with the correct Attributes.id. The result is, i get a ListingsAttributes record with the Listings.id and Attributes.id, but nothing in the *value* column. This is making me crazy & i'm on the edge of scrapping this thing & starting over with something else. i never expected this much difficulty getting some basic data relationships to work after following documentation exactly (and then having to make *undocumented* changes that still only get me part-way there. i don't think i'm doing anything radical or unconventional with my form, so i don't understand the difficulty of making the ORM function as advertised. i'm frustrated, obviously. It's taken me this long to come back to follow up because it becomes harder & harder to come back & try again. i'm almost there, i just don't know why the *value* input won't go into the Entity data with everything else. If you're moving on, i totally understand. But if you'd like to look at the code directly, let me know. i'll have to put a version online without sensitive info in it... Thanks for at least getting me this far. :) -joe On Wednesday, 25 February 2015 04:57:35 UTC-5, heavyKevy wrote: > > Joe, > > Here is what I did: > In the attribute entity: > protected $_accessible = [ > 'id' => true, > 'name' => true, > 'listings' => true, > ]; > > In the Listings_Attributes Table: > public function validationDefault(Validator $validator) > { > $validator > ->add('id', 'valid', ['rule' => 'numeric']) > ->allowEmpty('id', 'create') > ->add('listing_id', 'valid', ['rule' => 'numeric']) > ->allowEmpty('listing_id', 'create') > ->notEmpty('listing_id') > ->add('attribute_id', 'valid', ['rule' => 'numeric']) > ->allowEmpty('attribute_id', 'create') > ->notEmpty('attribute_id') > ->allowEmpty('value'); > > return $validator; > } > > > In the Listings Controller: Add method: > public function add() > { > $listing = $this->Listings->newEntity(); > if ($this->request->is('post')) { > $listing = $this->Listings->patchEntity($listing, > $this->request->data,['associated'=>['attributes._joinData']]); > $listing->dirty('attributes._joinData',true); > if ($this->Listings->save($listing)) { > $this->Flash->success('The listing has been saved.'); > return $this->redirect(['action' => 'index']); > } else { > $this->Flash->error('The listing could not be saved. > Please, try again.'); > } > } > $attributes = $this->Listings->Attributes->find('list', ['limit' > => 200]); > $this->set(compact('listing', 'attributes')); > $this->set('_serialize', ['listing']); > } > > In the Add template of the Listing: add.ctp > <?= $this->Form->create($listing); ?> > <fieldset> > <legend><?= __('Add Listing') ?></legend> > <?php > echo $this->Form->input('name'); > //echo $this->Form->input('attributes._ids', ['options' => > $attributes]); > > if(!empty($attributes)){ > $i =0; > foreach( $attributes as $k => $attr){ > echo > $this->Form->input('attributes.'.$i.'.id',['type'=>'checkbox','value'=>$k,'label'=>$attr]); > > > echo > $this->Form->input('attributes.'.$i.'.name',['type'=>'hidden','value'=>$attr]); > echo > $this->Form->input('attributes.'.$i.'._joinData.value'); > $i++; > } > } > //echo $this->Form->select('attributes._ids', > $attributes,['label'=>'Attributes','multiple' => 'checkbox']); > > > ?> > </fieldset> > <?= $this->Form->button(__('Submit')) ?> > <?= $this->Form->end() ?> > > > I don't believe I changed anything else.. Just used what was baked, and it > works for me. > > --Kevin > > -- 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+unsubscr...@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.