Am stumped by the same problem. I have a form that corresponds to the
main db object, and in it i have a bunch of embedded forms with
related objects. I need the ID generated for the main object to pass
to the related objects. The main object is being saved fine (I see it
in the DB), but when i try to do this 'this->getObject()-getId()' I
get back a null value. I have done the exact same thing with another
form and it is working fine. What am I doing wrong? Here is the code
in my embedded form?

        public function saveEmbeddedForms($con = null, $forms= null)
        {
                .......
                .......

                foreach($receivers as $reciever){
                        $msg_reciever = new MessageReciever();
                        $msg_reciever->setMessageId($this->getObject()-
>getId());
                        $msg_reciever->setRecieverId($reciever->getId
());
                        $msg_reciever->setStatus($this->getObject()-
>getStatus());
                        $msg_reciever->save();
                }
        }

and this is how i embed the form

      $recivers_form = new MessageRecieverForm($this->getObject());
      $this->embedForm('recievers', $recievers_form);

I don't know if this the best way to do this, but, by God, it has
worked before..

I hope someone can get to the bottom of this..
cheers,


On Mar 16, 11:38 am, lionslair <webmas...@lionslair.net.au> wrote:
> I think that is basically same as what I have here.
>
> The ServerForm
>
> // ServerFormClass extends BaseServerForm
>
>   public function configure()
>   {
>
>     // remove some fields from the form
>     unset($this['created_at'], $this['updated_at'], $this
> ['server_key']);
>
>     //    if ($this->isNew())
>     //    {
>     //      unset($this['hardware_information']['server_id']);
>     //    } // end if
>
>     $maintain_options = array(
>                                'Y' => 'Yes',
>                                'N' => 'No',
>     );
>
>     $this->widgetSchema['maintain']       = new sfWidgetFormChoice
> (array('choices' => $maintain_options));
>     //    $this->widgetSchema['contact_id']   = new
> sfWidgetFormInputHidden();
>     $this->widgetSchema['contact_id']     = new
> sfWidgetFormPropelChoice(array('model' => 'Contact', 'order_by' =>
> array('Name', 'asc'), 'label' => 'Contact'));
>     $this->widgetSchema['server_type_id'] = new
> sfWidgetFormPropelChoice(array('model' => 'ServerType', 'order_by' =>
> array('Name', 'asc'), 'label' => 'Server Type', 'expanded' => true));
>     //  'default' => ServerTypePeer :: retrieveIdByName('server')
>
>     //    echo $this->getObject()->getInstallDate("Y");
>     $years = range(date('Y') - 10, date('Y') + 15);
>
> //    $server_info = $this->getObject()->getServer
>
>     /*
>      * check if the object is new
>      */
>     if ($this->getObject()->isNew())
>     {
>       $this->widgetSchema['install_date'] = new sfWidgetFormDate(array
> ('format' => '%day%/%month%/%year%', 'years' => array_combine($years,
> $years), 'empty_values' => array('year' => date("Y"), 'month' => date
> ('m'), 'day' => date('d'))));
>       $this->widgetSchema['next_date']    = new sfWidgetFormDate(array
> ('format' => '%day%/%month%/%year%', 'years' => array_combine($years,
> $years), 'empty_values' => array('year' => date('Y'), 'month' => date
> ('m'), 'day' => date('d'))));
>       //      $this->widgetSchema['server_type_id']->setDefault
> (ServerTypePeer :: retrieveIdByName('server'));
>     }
>     else
>     {
>       $this->widgetSchema['install_date'] = new sfWidgetFormDate(array
> ('format' => '%day%/%month%/%year%', 'years' => array_combine($years,
> $years), 'empty_values' => array('year' => 
> $this->getObject()->getInstallDate('Y'), 'month' => 
> $this->getObject()->getInstallDate
>
> ('m'), 'day' => $this->getObject()->getInstallDate('d'))));
>       $this->widgetSchema['next_date']     = new sfWidgetFormDate(array
> ('format' => '%day%/%month%/%year%', 'years' => array_combine($years,
> $years), 'empty_values' => array('year' => 
> $this->getObject()->getNextDate('Y'), 'month' => 
> $this->getObject()->getNextDate('m'),
>
> 'day' => $this->getObject()->getNextDate('d'))));
>     } // end if else
>
>     $this->widgetSchema->setLabels(array('notes' => 'Comments'));
>
>     // only embed if there is a type object (edit vs create)
>     if (!$this->getObject()->isNew())
>     {
>       $this->embedForm('information', $this->getServerInfoObject());
>       //      $this->embedForm('Hardware Information', new
> ServerInfoForm(ServerInfoPeer :: 
> retrieveByServerId($this->getObject()->getId())));
>
>     }
>     else
>     {
>       $server_info_form = new ServerInfoForm();
>       
> $server_info_form->getObject()->setServerId($this->getObject()->getId());
>
>       $this->embedForm('Hardware Information', $server_info_form);
>
>       unset($server_info_form['server_id']);
>     }
>
> //     unset($this['server_id']);
>   }
>
> How ever when I then save this new server and new record I get the two
> records inserted and the server_id field within the server_info table
> is not getting the id (server.id) value from the server table added to
> it.
>
> I have spent so much time trying to work this out.  All I want is when
> the new server record is created and the embbed server_info fields are
> submitted that the server_info record that is created then uses the
> newly created server.id field that should populate the server_id field
> of the server_info table
>
> It is the exact same principle as the user and user profile
> relationship.
>
> On Mar 16, 12:42 am, justin_davis <jdavis1...@gmail.com> wrote:
>
> > I'm doing something like this, and this is my solution:
>
> > Let's say you have two forms, one is an sfGuardUser form (Form 1), the
> > other is a Profile form (Form 2) (representing those two models).
> > When a new user is created, a new profile must be also created that
> > depends on that record (Profile depends on sfGuardUser):
>
> > (this is sfGuardUserForm.class.php):
>
> >           $profileForm = new ProfileForm();
> >           $profileForm->getObject()->setsfGuardUserId($this->getObject());
> >           $this->embedForm('profile', $profileForm);
>
> > You'll also want to unset the sfGuardUserId field: unset($profileForm
> > ['sf_guard_user_id']);
>
> > So, it's basically creating a ProfileForm, getting the object related
> > to it, then telling symfony to set that object's sfUserGuardId to
> > equal the sfGuardUser object that this class represents.
>
> > Does that make sense?  Hope this helps.  I'm somewhat of a newb
> > myself, so I may be telling you something that doesn't apply.
>
> > Good luck!
>
> > Justin
>
> > On Feb 5, 4:25 pm, Timmy <m...@timothybowler.com> wrote:
>
> > > I have two forms form 1 and form 2. Form 2 is embedded into form 1. On
> > > save form1 must be saved as a new row and therefore recieving a
> > > primary key, Afterwards this foreign key needs to be injected into
> > > form 2 before it can save.
>
> > > The only way i have figured out at the mo is after the form is valid.
> > > Instantiate the two models, populate them, add form2 model to form 1
> > > model then save.
>
> > > Isn't there an easier way?
>
> > > Thanx
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to 
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to