ActiveRecord icon indicating copy to clipboard operation
ActiveRecord copied to clipboard

Evitar que el update ponga NULL a campos no pasados.

Open henrystivens opened this issue 8 years ago • 2 comments

La función QueryGenerator::update genera la cadena UPDATE con todos los nombres de los campos que saca de la tabla y esto hace que si el campo no está definido en el objeto(LiteRecord) que se le está pasando lo ponga como NULL en la cadena borrando cualquier dato que haya registrado en la base de datos.

henrystivens avatar Mar 14 '16 14:03 henrystivens

Hola,

Con esto funciona pero no se si rompe algo que ya tengan contemplado y yo esté pasando por alto.

    public static function update(\Kumbia\ActiveRecord\LiteRecord $model, array &$data)
    {
        $set = [];
        $pk = $model::getPK();
        /*elimina la clave primaria*/
        $list = array_diff($model::metadata()->getFieldsList(), [$pk]);
        foreach ($list as $field) {
            if(isset($model->$field)){
                static::updateField($field, $model->$field, $data, $set, $model);
            }
        }
        $set = \implode(', ', $set);
        $source = $model::getSource();
        $data[":$pk"] = $model->$pk;
        return "UPDATE $source SET $set WHERE $pk = :$pk";
    }

henrystivens avatar Mar 15 '16 14:03 henrystivens

Esto se acomodó?

bethuxs avatar Oct 24 '20 20:10 bethuxs