i figured out part of my trouble, but the purpose of the original post 
still remains.

The parent record in Listings wasn't saving correctly because i didn't have 
an `active` field in the form (*facepalm*). Corrected that. Still having 
trouble with the date field, kinda frustrated there. But to the point...

When i save my data, i'm now getting a record in Listings. Yay! But the 
associated data in ListingsAttrs is still not there. Boo!

Current structure of ListingsAttrs POST data:
[listings_attrs] => Array (
    [4] => Array (
        [attr_id] => 4
    )
    [1] => Array (
        [attr_id] => 1
        [value] => Off-street
    )
)

Which now gives me this in the *$listing* Entity:
"listings_attrs": {
    "4": {
        "attr_id": "4"
    },
    "1": {
        "attr_id": "1",
        "value": "Off-street"
    }
}

This is progress! The associated data wasn't in previous debug data.

So what am i still missing that it won't save that data? Remember, `value` 
is optional to the data record, it's controlled by the UI. So both of those 
records *should be* valid. Why then is neither of them being saved?

Any additional help here is appreciated.
-joe t.


On Monday, 22 December 2014 22:54:12 UTC-5, Joe T. wrote:
>
> Sorry this took several days to respond, i was sick all weekend, didn't 
> get anywhere near my computer.
>
> i changed the names of the inputs from *listingsattrs* >> *listings_attrs* 
> as you recommended (no clue how i missed that to begin with). My POST data 
> now looks exactly as it did before, except for the name of that particular 
> item. However, the log output for the $listing entity is still missing 
> the associated ListingsAttrs data.
>
> The ListingsAttrs Entity didn't have a $_accessible array, so i added a 
> default:
> $_accessible = [
>   '*' => true
> ];
>
> The controller code looks like:
> $listing = $this->Listings->newEntity($this->request->data);
>
> /* i've also tried:
> $listing = $this->Listings->newEntity($this->request->data, ['associated' 
> => ['ListingsAttrs']]);
> $listing = $this->Listings->newEntity($this->request->data, ['associated' 
> => ['ItemAttrs']]);
> $listing = $this->Listings->newEntity($this->request->data, ['associated' 
> => ['ListingsAttrs.ItemAttrs']]);
> $listing = $this->Listings->newEntity($this->request->data, ['associated' 
> => ['ItemAttrs.ListingsAttrs']]);
> */
>
> if ($this->Listings->save($listing)) {
>   // etc.
> }
> else {
>   throw new Exception...
> }
>
> What else can i try? i appreciate the help.
> -joe
>
> On Friday, 19 December 2014 11:29:12 UTC-5, José Lorenzo wrote:
>>
>> You should post a property called listings_attrs, check your entity 
>> $_accessible array to make sure the property is also writable with request 
>> data.
>>
>> On Friday, December 19, 2014 6:29:43 AM UTC+1, Joe T. wrote:
>>>
>>> i've seen a couple similar threads about this, but not my exact problem.
>>>
>>> i'm trying to follow the guide here: 
>>> http://book.cakephp.org/3.0/en/orm/saving-data.html#converting-request-data-into-entities
>>>  
>>> and coming up short. *i'm not getting any errors* (except a date field 
>>> that constantly fails if it has a value, separate issue)...so i have no 
>>> idea what's happening to the data i submit, or why it isn't saved to the DB.
>>>
>>> My raw response data logged to Cake Debug is:
>>>
>>> Array (
>>>   [title] => '123 Main St'
>>>   [street] => '123 Main St'
>>>   [lot_no] => 1
>>>   [lat] =>
>>>   [lng] =>
>>>   [city] => 'Hometown'
>>>   [county] => 
>>>   [state] => 'MI'
>>>   [zip] => '49000'
>>>   [area] => 900     
>>>   [bedrooms] => 2     
>>>   [bathrooms] => 1     
>>>   [price] => 525     
>>>   [ready_date] =>
>>>   [listingsattrs] => Array (
>>>     [4] => Array (
>>>       [id] => 4
>>>     )
>>>     [1] => Array (
>>>       [id] => 1
>>>       [value] => 'Off-street'
>>>     )
>>>   )
>>>   [park_id] => 1
>>>   [house_condition_id] => 3
>>>   [house_style_id] => 2 
>>>   [term_id] => 2
>>>   [info_body] => '<p>Live here. It&#39;s great!</p>'
>>> ) 
>>>
>>> i have tables *Listings*, *ItemAttrs*, and *ListingsAttrs*. In 
>>> *ListingsTable*, the relationship is defined as:
>>> $this->addAssociations([
>>>   'belongsToMany' => [
>>>     'ItemAttrs' => [
>>>       'targetForeignKey' => 'attr_id',
>>>       'through'          => 'ListingsAttrs',
>>>       'saveStrategy'     => 'replace',
>>>   ]
>>> ])'
>>>
>>> *Some* attributes are required to have a value when assigned to a 
>>> Listing (or other parent object they can be assigned to with a similar 
>>> relationship). When a requires-value attribute is selected for the (in this 
>>> case) Listing, a text field is shown & marked as required. The value is 
>>> stored in the *ListingsAttrs* record with the Listing ID and ItemAttr 
>>> ID.
>>>
>>> When i submit the form, the correct attribute data is there. But it gets 
>>> lost when i generate the Entity:
>>>
>>> $listing = $this->Listings->newEntity($this->request->data, [
>>>   'associated' => ['ListingsAttrs']
>>> ]);
>>>
>>>
>>> Log of *$listing*:
>>> {
>>>   "title": "123 Main St",
>>>   "street": "123 Main St",
>>>   "lot_no": "1",
>>>   "lat": null,
>>>   "lng": null,
>>>   "city": "Hometown",
>>>   "county": null,
>>>   "state": "MI",
>>>   "zip": "49000",
>>>   "area": 900,
>>>   "bedrooms": 2,
>>>   "bathrooms": 1,
>>>   "price": 525,
>>>   "ready_date": null,
>>>   "park_id": 1,
>>>   "house_condition_id": 3,
>>>   "house_style_id": 2,
>>>   "term_id": 2,
>>>   "info_body": "<p>Live here. It&#39;s great!<\/p>\r\n" 
>>> }
>>>
>>> i've tried creating the Listings entity without 'associated' at all, as 
>>> 'associated' 
>>> => 'ListingsAttrs', and 'associated' => 'ItemAttrs'
>>>
>>> i'm trying to understand this ORM, because it *looks* like it should be 
>>> very automated & easy to use. (By comparison, has anyone here used ZF1's 
>>> ORM? Yikes.) But i don't know what i'm doing wrong here. It *seems* 
>>> like i'm following the guide, but i'm obviously mixing something up.
>>>
>>>
>>>

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.

Reply via email to