Laravel - Actualizar sólo campos vacíos en un modelo
Estaba trabajando con Laravel y me encontré en la necesidad de actualizar solamente los campos vacíos en un modelo existente o crearlo si no existía. Existe el método updateOrCreate
pero no brinda ninguna ayuda para actualizar únicamente los campos que no estén llenos, sino todos los campos declarados, incluso si ya tienen valores.
Lo pude realizar para un modelo, pero después tuve la necesidad de usarlo en muchos más, entonces pensé: ¿Cuál sería la manera de replicarlo en los modelos que necesite?. La solución era hacer un Trait
Este trait toma los mismos parámetros que la función updateOrCreate
hacienda una query al modelo y los valores necesarios para crearlo/actualizarlo. A continuación el código para replicarlo en tu proyecto.
Con esto, necesitas ir a tu modelo Eloquent e incluirlo con la línea de código use SecureUpdatable
. Además, tendrás autocompletado en tu editor de código.
¿Cómo funciona?
Como puedes ver, trata de encontrar si el modelo existe o crea una nueva instancia usando la función firstOrNew
, después itera todos los campos existentes en la tabla en búsqueda de los que tengan un null como valor y los reemplaza