ActiveRecord
ActiveRecord copied to clipboard
Evitar que el update ponga NULL a campos no pasados.
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.
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";
}
Esto se acomodó?