Actualizar por defecto un campo condicionado por dato de otro campo.

Tengo la intención de hacer un UPDATE de un campo tipo TIMESTAMP en Postgres, pero condicionado por el valor de otro campo.

Ej: Si campo ESTADO = ‘A’ no hacer nada. Si campo ESTADO = ‘I’ entonces que FECHA_BAJA sea NOW().

Ahora bien, realmente tengo pensado algunas opciones de solución pero no sé cuál sería la mejor según las buenas prácticas de desarrollo.

1. Hacer directamente en la función actionUpdate() algo así como:


            if($model->estado=='H')

                $model->fecha_baja= CDbExpression('NOW()');



2. Generar una función en el modelo y llamar a esa función:


// En el model

    public function getNow() {

        return CDbExpression('NOW()');

    }


// En el actionUpdate del controller

            if($model->estado=='H')

                $model->fecha_baja=$model->getNow();



3. Tratar la situación en el Model a través de CDefaultValueValidator (Esto ya no se cómo ejemplificar con código). Se me viene a la cabeza crear un escenario para el UPDATE y que con una función haga la verificación del campo ESTADO en el modelo y sea tomado por la regla ‘default’.

Espero haber sido claro sobre mi consulta.

Muchas gracias!!

Buenas.

Un ejemplo de CDefaultValueValidator.

En mi opinión la primera opción que escribes estaría bien.

Un saludo.