¿Cómo actualizar SfuserProfile después de la finalización de un módulo separado? Postave () no funciona

StackOverflow https://stackoverflow.com/questions/7309498

Pregunta

Tengo un formulario de registro que incluye SFregistration y SFProfile, que después de la finalización se redirige a otro formulario, para determinar la corporación del usuario y es un módulo separado. El SFProfile incluye un campo del módulo de la Corporación ... el Corporate_ID. Pero dado que el Corporate_ID no es parte del perfil, no se incluye en el momento de registro. Aquí está la pregunta, después de completar el módulo de la Corporación, ¿cuál es la mejor manera de actualizar el perfil del usuario con Corporate_ID del módulo de la corporación recientemente completado? Intenté esto:

public function postSave()
{
$corpId = $this->form->getId();
$logged_user_id = sfContext::getInstance()->getUser()->getId();
Doctrine_Query::create()
->update('sf_guard_user_profile p')
->set('p.corporate_id', $corpId)
->where('p.user_id' == $logged_user_id )
->execute();
}

colocado en la acción del módulo de la empresa, pero no está actualizando el perfil con la empresa_id.

¿Sugerencias?

ACTUALIZACIÓN - Por solicitud, aquí está la información solicitada: (my >> lib> form >> doctrine >> corporationform.class.php está vacía ... Estaba intentando mis funciones en la clase de acciones ... que puede ser el problema ). Solo para aclarar, solo necesito actualizar el perfil del usuario con el recién creado Corporate_ID después de que el usuario complete el módulo de la corporación.
Y mi esquema:

sfGuardUser:
  actAs: [Timestampable]
  columns:
    first_name: string(255)
    last_name: string(255)
    email_address:
      type: string(255)
      notnull: true
      unique: true
    username:
      type: string(128)
      notnull: true
      unique: true
    algorithm:
      type: string(128)
      default: sha1
      notnull: true
    salt: string(128)
    password: string(128)
    is_active:
      type: boolean
      default: 1
    is_super_admin:
      type: boolean
      default: false
    last_login:
      type: timestamp
  indexes:
    is_active_idx:
      fields: [is_active]
  relations:
    Groups:
      class: sfGuardGroup
      local: user_id
      foreign: group_id
      refClass: sfGuardUserGroup
      foreignAlias: Users
    Permissions:
      class: sfGuardPermission
      local: user_id
      foreign: permission_id
      refClass: sfGuardUserPermission
      foreignAlias: Users

sfGuardUserProfile:
 actAs:            { Timestampable: ~ }
 columns:
  id: { type: integer, primary: true, notnull: true, autoincrement: true, unique: true }
  user_id: { type: integer }
  corporate_id: { type: integer }
  type_id: { type: integer, notnull: true }
  prefix_id: { type: integer }
  middle_name: { type: string(55) }
  suffix_id: { type: integer }
  phone: { type: string(55), notnull: true }
  home_address_line_one: { type: string }
  home_address_line_two: { type: string }
  home_city: { type: string }
  state_id: { type: integer }
  home_zip: { type: integer } 
 relations:
  User: { class: sfGuardUser, local: user_id, foreign: id, type: one, foreignType: one,     foreignAlias: Profile }
  Type: { local: type_id, foreign: id, type: one, foreignAlias: Types } 
  Prefix: { local: prefix_id, foreign: id, type: one, foreignAlias: Prefixs } 
  Suffix: { local: suffix_id, foreign: id, type: one, foreignAlias: Suffixs }   
  State:  { local: state_id, foreign: id, foreignAlias: States }  
  Corporation: { local: corporate_id, foreign: id, foreignAlias: Corporations }

Corporation:
  columns:
   id:             { type: integer, primary: true, notnull: true, autoincrement: true,    unique: true }
   user_id:        { type: integer }
   name:           { type: string(55), notnull: true }
   address_line1:   { type: string(255), notnull: true }
   address_line2:   { type: string(255), notnull: true }
   city:           { type: string(25), notnull: true }
   state_id:       { type: integer, notnull: true }
   zip:            { type: string(25), notnull: true }
   phone:          { type: string(25), notnull: true }
   email:          { type: string(100), notnull: true }
   website:        { type: string(100) }
   logo:           { type: string(255) }
  relations:
    User: { class: sfGuardUser, local: user_id, foreign: id, foreignAlias: Users }
¿Fue útil?

Solución 2

No olvides el -> save ();

    public function setId() 
  {
        $user_id = $this->getUser()->getGuardUser()->getId();
        $corp_id = 1;
        $user_profile = Doctrine_Core::getTable('sfGuardUserProfile')->findOneByUserId($user_id);
        $user_profile->setCorporateId($corp_id)->save();
   }

  protected function processForm(sfWebRequest $request, sfForm $form)
  {            
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
        self::setId();        
        $corporation = $form->save();    
        $this->redirect('dashboard/index');      
    }
  }

Otros consejos

En tu forma:

public function  doUpdateObject($values)
  {

   parent::doUpdateObject($values);
   $this->getObject()->setCorporateId(your value);

}

Por ejemplo //apps/frontend/yourmodule/action.class.php

protected function processForm(sfWebRequest $request, sfForm $form)
    {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {

       $corporation = $form->save();
       $user_id=$this->getUser()->getGuardUser()->getId();
       $profile = Doctrine_Core::getTable('sfGuardUserProfile')->findOneByUserId($user_id);
       $profile->setCorporateId('your value');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top