Yii Framework Forum: Resetscope() Para Funcion Save() - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Resetscope() Para Funcion Save() Rate Topic: -----

#1 User is offline   jamon 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 13
  • Joined: 09-March 11

Posted 14 February 2013 - 08:29 AM

Hola amigos,

me ha surgido un problema.

Tengo un defaultScope que siempre aplica una condición a una tabla (username,password,cod_cliente):
Username es un email unico (PrimaryKey única). La intencion de este defaultScope es que solo se puedan hacer operaciones de CRUD para los que se cumpla.


 
    /**
     * @return array conditions
     */
    
    public function defaultScope()
    {
        $x=Yii::app()->getSession()->get('usuario'); //el cod_cliente lo sacamos de la session
        return array(
            'condition'=>"cod_cliente=".$x['COD_CLIENTE'],
        );
    }



En el rules:
array('username', 'unique', 'message'=>'Ya existe el email!','on'=>'insert')



El problema es que al hacer un save() introduciendo en el formulario un username que ya existe, el formulario no muestra el mensaje de error correspondiente y continua, lanzando entonces un error 500 de duplicate entry.

Si el usurname duplicado pertenece al usuario en session, el formulario si que muestra el message del rules.


Como podría desactivar el defaultScope() para el Save()?
Ya he probado a hacer $model->resetScope()->save() pero no funciona.

Saludos y gracias de antemano.
0

#2 User is offline   jamon 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 13
  • Joined: 09-March 11

Posted 14 February 2013 - 11:58 AM

He podido solventar el error usando beforeValidation()

protected function beforeValidate()
{
        $command = Yii::app()->db->createCommand("SELECT count(username) as counter FROM mailbox WHERE username LIKE '$this->username'");
        $record=$command->queryScalar();
        
        if($record>0)
        {
            $this->addError("username", "Ya existe el email!");
        }
        return parent::beforeValidate();
}


EDITO:

Si solo queremos que funcione en el insert, pero no en el update:
protected function beforeValidate()
    {
        $command = Yii::app()->db->createCommand("SELECT count(username) as counter FROM mailbox WHERE username LIKE '$this->username'");
        $record=$command->queryScalar();
        
        if($record>0 && $this->isNewRecord)
            $this->addError("username", "Ya existe el email!");
);
        
        return parent::beforeValidate();
    }


Aunque si alguien sabe como deshabilitar el defaultScope para el Save, sería de gran ayuda.

Saludos.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users