OK, I finally found a workaround...
I had to add a id primary key (integer autoincrement) to each of my
child objects and change their product_id field to a simple foreign
key. Example for book:
Book:
columns:
id:
type: integer
primary: true
autoincrement: true
product_id: integer
type: string(20)
editor: string(60)
pages: integer(4)
relations:
Product:
local: product_id
foreign: id
type: one
foreignType: one
then, in the Form class of each child, I do a
unset($this['product_id']);
and everything works fine...
So it looks like the fact that my child objects had no artificial
primary key was the problem... Weird.
I don't know if this is a bug in Doctrine or if this is just something
that is not supposed to work this way, even though it works fine with
propel...
On Jun 5, 10:12 pm, Raphael <[email protected]> wrote:
> I just tried but it doesn't seem to solve my problem...
> it still tries to save the child object with a null key
>
> thanks anyway.
>
> On Jun 5, 1:25 am, Рустам <[email protected]> wrote:
>
> > try thishttp://trac.symfony-project.org/ticket/6374
>
> > On Fri, Jun 5, 2009 at 7:26 AM, Raphael Guillet
> > <[email protected]>wrote:
>
> > > Hi all,
>
> > > I'm loosing my hair on this one, I have succesfully nested forms before
> > > but
> > > this case is a bit specific. I only have this problem with Doctrine, I
> > > works
> > > fine with Propel.
>
> > > Here is my data model: I have a parent class "Product" and 2 child class
> > > "Book" and "Video"
> > > the primary key of the 2 children is also the foreign key (referencing
> > > their parent) so it does not auto increment.
>
> > > The "parent" object:
>
> > > Product:
> > > columns:
> > > id:
> > > type: integer
> > > primary: true
> > > autoincrement: true
> > > type: string(20)
> > > title: string(255)
>
> > > The "child" objects:
>
> > > Book:
> > > columns:
> > > product_id:
> > > type: integer
> > > primary: true
> > > type: string(20)
> > > editor: string(60)
> > > pages: integer(4)
> > > relations:
> > > Product:
> > > local: product_id
> > > foreign: id
> > > type: one
> > > foreignType: one
>
> > > Video:
> > > columns:
> > > product_id:
> > > type: integer
> > > primary: true
> > > format: string(20)
> > > editor: string(60)
> > > length: integer
> > > relations:
> > > Product:
> > > local: product_id
> > > foreign: id
> > > type: one
> > > foreignType: one
>
> > > I want to nest the correct child form in the parent form, depending on the
> > > parent type value (book or video).
>
> > > when I create a new product, my executeNew gives it a type (either book or
> > > video)
> > > in the ProductForm, I embed a child form depending on this type by using a
> > > getChildForm() function I made.
> > > $this->embedForm('child', $this->getChildForm());
>
> > > the nesting works (the correct nested form appears)
>
> > > I overwrote the ProductForm::bind() function to add this line:
>
> > > $this->embeddedForms['child']->getObject()->setProduct($this->getObject());
>
> > > this is supposed to link the child object (from the embedded form) to its
> > > parent object (the main form).
>
> > > but when I save a new product, the child object is not linked to the
> > > parent
> > > Product and I get a null primary key SQL error (Doctrine tries to save my
> > > child object with a null product_id).
>
> > > When I update a product which already has a child form, everything works
> > > fine... (the correct nested form appears with the data and everything is
> > > succesfully saved)
>
> > > Any idea anyone?
>
> > > If you need more details on my code I'll post it, I didn't want to scare
> > > people away by dumping all my code... I hope I'm just missing something
> > > obvious...
>
> > > Thanks a lot!
>
> > > Raphael
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"symfony users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---