Re: app attempting to insert records rather than update

2009-06-22 Thread Jon Chin
Thanks, Brian for all your input.  I agree, the code was pretty 
difficult to understand.  After spending tons of time staring at the 
code, I realized there was a simpler and more correct way to do it.  I 
rewrote it and it's working for the most part now.  I still have to work 
out a few kinks, though.


Jon Chin




brian wrote:

That's a bit difficult to follow. At what point are you calling
_processMerit()? And you have an empty block inside wizard()? Is that
on purpose?

You have a couple of instances with $this->Merit->save($this->data)
but I only see where you're reading data from the DB for Application.
hich model are you working with?

Sorry, I've never used the WizardComponent so this is a bit opaque to me.

On Sat, Jun 20, 2009 at 2:06 AM, Jon Chin wrote:
  

Here's the code.  I still can't get it to update rather than insert.
What am I doing wrong?

 function beforeFilter() {
   $this->Wizard->steps = array('profile', 'merit', 'finance',
'education', 'endorsement');
 }

 function wizard($step = null) {
 if(isset($this->passedArgs['1']) ||
$this->Session->read('application_id')) //if application already
defined, load it
 {
   //Ensure the user is authorized to edit the application
   if(isset($this->passedArgs['1']))
   {$this->Session->write('application_id', $this->passedArgs['1']);}
   $application =
$this->Application->findById($this->Session->read('application_id'));

   if($application['Application']['user_id'] ==
$this->Auth->user('id'))
   {
   }
   else
   {
 $this->Session->setFlash('You do not have authorization to
view this.');
 $this->Session->delete('application_id');
 $this->redirect('/applications');
   }

 }
 else //if not entering with previously started application, start one
 {
   //create application record
   $this->Application->create();
   $this->Application->save(array('user_id'=>$this->Auth->user('id')));
   $this->Session->write('application_id',
$this->Application->getInsertID());
 }
   $this->Wizard->process($step);
 }

   function _processMerit() {
 App::import('Sanitize');
 Sanitize::clean($this->data);
 switch($this->params['form']['action'])
 {
   case 'Continue':
 if($this->Merit->save($this->data)) {
   return true;
 }
 else
 {
   $this->Session->setFlash('Sorry, the information you\'ve
entered is incorrect.');
   return false;
 }
 break;
   case 'Back':
 $this->redirect('/applications/wizard/profile');
 break;
   case 'Save':
 if($this->Merit->save($this->data)) {
   $this->Session->setFlash('Your changes have been saved.');
 }
 else
 {
   $this->Session->setFlash('Sorry, the information you\'ve
entered is incorrect.');
 }
 break;
 }
 return false;
   }

Jon Chin



brian wrote:


On Fri, Jun 19, 2009 at 2:04 AM, Jon Chin wrote:

  

Thanks for the tip.  Sadly, I'm still having problems with it.  When I
add input('id');?> to the view, all it does is generate  which doesn't change anything in my controller when I print the
contents of $this->data.  I also tried making the field called
application_id in the form, but it didn't have an effect either.

It's really stumping me.  Any idea what's going on?  Since my primary
key on Merit is application_id, should Cake already know that if I'm
trying to set $this->Merit->id?




The PK for Merit should be "id", not "application_id". That should be
a foreign key pointing to applications table.

If you post the code for the controller action we might be able to sort it out.

  


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~--~~~~--~~--~--~---

  


smime.p7s
Description: S/MIME Cryptographic Signature


Re: app attempting to insert records rather than update

2009-06-20 Thread brian

That's a bit difficult to follow. At what point are you calling
_processMerit()? And you have an empty block inside wizard()? Is that
on purpose?

You have a couple of instances with $this->Merit->save($this->data)
but I only see where you're reading data from the DB for Application.
hich model are you working with?

Sorry, I've never used the WizardComponent so this is a bit opaque to me.

On Sat, Jun 20, 2009 at 2:06 AM, Jon Chin wrote:
>
> Here's the code.  I still can't get it to update rather than insert.
> What am I doing wrong?
>
>  function beforeFilter() {
>    $this->Wizard->steps = array('profile', 'merit', 'finance',
> 'education', 'endorsement');
>  }
>
>  function wizard($step = null) {
>      if(isset($this->passedArgs['1']) ||
> $this->Session->read('application_id')) //if application already
> defined, load it
>      {
>        //Ensure the user is authorized to edit the application
>        if(isset($this->passedArgs['1']))
>        {$this->Session->write('application_id', $this->passedArgs['1']);}
>        $application =
> $this->Application->findById($this->Session->read('application_id'));
>
>        if($application['Application']['user_id'] ==
> $this->Auth->user('id'))
>        {
>        }
>        else
>        {
>          $this->Session->setFlash('You do not have authorization to
> view this.');
>          $this->Session->delete('application_id');
>          $this->redirect('/applications');
>        }
>
>      }
>      else //if not entering with previously started application, start one
>      {
>        //create application record
>        $this->Application->create();
>        $this->Application->save(array('user_id'=>$this->Auth->user('id')));
>        $this->Session->write('application_id',
> $this->Application->getInsertID());
>      }
>    $this->Wizard->process($step);
>  }
>
>    function _processMerit() {
>      App::import('Sanitize');
>      Sanitize::clean($this->data);
>      switch($this->params['form']['action'])
>      {
>        case 'Continue':
>          if($this->Merit->save($this->data)) {
>            return true;
>          }
>          else
>          {
>            $this->Session->setFlash('Sorry, the information you\'ve
> entered is incorrect.');
>            return false;
>          }
>          break;
>        case 'Back':
>          $this->redirect('/applications/wizard/profile');
>          break;
>        case 'Save':
>          if($this->Merit->save($this->data)) {
>            $this->Session->setFlash('Your changes have been saved.');
>          }
>          else
>          {
>            $this->Session->setFlash('Sorry, the information you\'ve
> entered is incorrect.');
>          }
>          break;
>      }
>      return false;
>    }
>
> Jon Chin
>
>
>
> brian wrote:
>> On Fri, Jun 19, 2009 at 2:04 AM, Jon Chin wrote:
>>
>>> Thanks for the tip.  Sadly, I'm still having problems with it.  When I
>>> add input('id');?> to the view, all it does is generate >> type="hidden" name="data[Application][id]" value="" id="ApplicationId"
>>> /> which doesn't change anything in my controller when I print the
>>> contents of $this->data.  I also tried making the field called
>>> application_id in the form, but it didn't have an effect either.
>>>
>>> It's really stumping me.  Any idea what's going on?  Since my primary
>>> key on Merit is application_id, should Cake already know that if I'm
>>> trying to set $this->Merit->id?
>>>
>>>
>>
>> The PK for Merit should be "id", not "application_id". That should be
>> a foreign key pointing to applications table.
>>
>> If you post the code for the controller action we might be able to sort it 
>> out.
>>
>> >
>>
>
> >
>

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~--~~~~--~~--~--~---



Re: app attempting to insert records rather than update

2009-06-19 Thread Jon Chin

Here's the code.  I still can't get it to update rather than insert.  
What am I doing wrong?

  function beforeFilter() {
$this->Wizard->steps = array('profile', 'merit', 'finance', 
'education', 'endorsement');
  }
 
  function wizard($step = null) {
  if(isset($this->passedArgs['1']) || 
$this->Session->read('application_id')) //if application already 
defined, load it
  {
//Ensure the user is authorized to edit the application
if(isset($this->passedArgs['1']))
{$this->Session->write('application_id', $this->passedArgs['1']);}
$application = 
$this->Application->findById($this->Session->read('application_id'));

if($application['Application']['user_id'] == 
$this->Auth->user('id'))
{
}
else
{
  $this->Session->setFlash('You do not have authorization to 
view this.');
  $this->Session->delete('application_id');
  $this->redirect('/applications');
}
   
  }
  else //if not entering with previously started application, start one
  {
//create application record
$this->Application->create();
$this->Application->save(array('user_id'=>$this->Auth->user('id')));
$this->Session->write('application_id', 
$this->Application->getInsertID());
  }
$this->Wizard->process($step);
  }

function _processMerit() {
  App::import('Sanitize');
  Sanitize::clean($this->data);
  switch($this->params['form']['action'])
  {
case 'Continue':
  if($this->Merit->save($this->data)) {
return true;
  }
  else
  {
$this->Session->setFlash('Sorry, the information you\'ve 
entered is incorrect.');
return false;
  }
  break;
case 'Back':
  $this->redirect('/applications/wizard/profile');
  break;
case 'Save':
  if($this->Merit->save($this->data)) {
$this->Session->setFlash('Your changes have been saved.');
  }
  else
  {
$this->Session->setFlash('Sorry, the information you\'ve 
entered is incorrect.');
  }
  break;
  }
  return false;
}

Jon Chin



brian wrote:
> On Fri, Jun 19, 2009 at 2:04 AM, Jon Chin wrote:
>   
>> Thanks for the tip.  Sadly, I'm still having problems with it.  When I
>> add input('id');?> to the view, all it does is generate > type="hidden" name="data[Application][id]" value="" id="ApplicationId"
>> /> which doesn't change anything in my controller when I print the
>> contents of $this->data.  I also tried making the field called
>> application_id in the form, but it didn't have an effect either.
>>
>> It's really stumping me.  Any idea what's going on?  Since my primary
>> key on Merit is application_id, should Cake already know that if I'm
>> trying to set $this->Merit->id?
>>
>> 
>
> The PK for Merit should be "id", not "application_id". That should be
> a foreign key pointing to applications table.
>
> If you post the code for the controller action we might be able to sort it 
> out.
>
> >
>   

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~--~~~~--~~--~--~---



Re: app attempting to insert records rather than update

2009-06-19 Thread brian

On Fri, Jun 19, 2009 at 2:04 AM, Jon Chin wrote:
>
> Thanks for the tip.  Sadly, I'm still having problems with it.  When I
> add input('id');?> to the view, all it does is generate  type="hidden" name="data[Application][id]" value="" id="ApplicationId"
> /> which doesn't change anything in my controller when I print the
> contents of $this->data.  I also tried making the field called
> application_id in the form, but it didn't have an effect either.
>
> It's really stumping me.  Any idea what's going on?  Since my primary
> key on Merit is application_id, should Cake already know that if I'm
> trying to set $this->Merit->id?
>

The PK for Merit should be "id", not "application_id". That should be
a foreign key pointing to applications table.

If you post the code for the controller action we might be able to sort it out.

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~--~~~~--~~--~--~---



Re: app attempting to insert records rather than update

2009-06-19 Thread Mauricio Morales

What get you printed out doing a print_r($data) just before the: if
($this->Merit->save($this->data)) {return true;}  ?

What if you save the ID manually into $this->data ?

$this->data['Application']['id'] = yourIDFromYourSession();
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~--~~~~--~~--~--~---



Re: app attempting to insert records rather than update

2009-06-18 Thread Jon Chin

Thanks for the tip.  Sadly, I'm still having problems with it.  When I 
add input('id');?> to the view, all it does is generate  which doesn't change anything in my controller when I print the 
contents of $this->data.  I also tried making the field called 
application_id in the form, but it didn't have an effect either.

It's really stumping me.  Any idea what's going on?  Since my primary 
key on Merit is application_id, should Cake already know that if I'm 
trying to set $this->Merit->id?

Jon Chin




rich...@home wrote:
> Forget about storing the id in a session and just include the field in
> the form. Cake will automatically hide it from the user.
>
> On Jun 18, 8:55 am, Jon Chin  wrote:
>   
>> I'm building a scholarship application using Cake.  I have an
>> Application model and a Merit model and I'm using a wizard component I
>> picked up from the Bakery.  The Application model has a hasOne
>> relationship to Merit.  I want my users to be able to come back to edit
>> the stuff they've already saved to the merits table.  My app works fine
>> the first time a user goes through the process.  The problem I'm having
>> is that when they want to edit the data (btw, it loads the data from the
>> db fine), it attempts to insert a new record rather than update the
>> current.  Here's my relevant code:
>>
>> In the controller:
>> $this->Merit->id = $this->Session->read('application_id');//I've done a
>> pr($this->Merit->id); and it is has the right application id
>> if($this->Merit->save($this->data)) {return true;}
>>
>> In the model:
>> var $name = 'Merit';
>> var $belongsTo = array('Application' => array(
>> 'className'=> 'Application',
>> 'foreignKey'=> 'application_id'
>> ));
>>
>> Any advice would be greatly appreciated.  I've been banging my head on
>> the wall over this.
>>
>> Thanks,
>>
>> --
>> Jon Chin
>> 
> >
>   

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~--~~~~--~~--~--~---



Re: app attempting to insert records rather than update

2009-06-18 Thread rich...@home

Forget about storing the id in a session and just include the field in
the form. Cake will automatically hide it from the user.

On Jun 18, 8:55 am, Jon Chin  wrote:
> I'm building a scholarship application using Cake.  I have an
> Application model and a Merit model and I'm using a wizard component I
> picked up from the Bakery.  The Application model has a hasOne
> relationship to Merit.  I want my users to be able to come back to edit
> the stuff they've already saved to the merits table.  My app works fine
> the first time a user goes through the process.  The problem I'm having
> is that when they want to edit the data (btw, it loads the data from the
> db fine), it attempts to insert a new record rather than update the
> current.  Here's my relevant code:
>
> In the controller:
> $this->Merit->id = $this->Session->read('application_id');//I've done a
> pr($this->Merit->id); and it is has the right application id
> if($this->Merit->save($this->data)) {return true;}
>
> In the model:
> var $name = 'Merit';
> var $belongsTo = array('Application' => array(
>     'className'    => 'Application',
>     'foreignKey'    => 'application_id'
> ));
>
> Any advice would be greatly appreciated.  I've been banging my head on
> the wall over this.
>
> Thanks,
>
> --
> Jon Chin
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~--~~~~--~~--~--~---