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'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'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.