CodeIgniter v4 Model
- conexión automática a BDD
- métodos CRUD básicos
- permite extender de otros modelos
instanciar
// Create a new class manually. $userModel = new \App\Models\UserModel(); // Create a shared instance of the model. $userModel = model('UserModel'); // or $userModel = model('App\Models\UserModel'); // or $userModel = model(\App\Models\UserModel::class); // Create a new class with the model() function. $userModel = model('UserModel', false); // Create shared instance with a supplied database connection. $db = db_connect('custom'); $userModel = model('UserModel', true, $db);
propiedades built-in
$DBGRoup: conexión alternativa a la BDD en lugar de la establecida por defecto.connecting$table: tabla primaria, solo aplica en los métodos básicos de CRUD$primaryKey$useAutoIncrement = true: poner a false si se ha delegado en la BDD$returnType = 'array': retorno defind(), array o object$useSoftDeletes = true;: si cierto, actualiza el campo deleted_atwithDeleted()
$allowedFields: campos permitidos en los métodos básicos CRUDsave(),insert(),update()- la
$primaryKeyno ha de estar en esta lista
$allowEmptyInserts: Si true lanzará excepción en caso de insert vacío$updateOnlyChanged: Si true lanzará excepción en caso de que no haya nada que actualizar$casts: forzar un cast de variables después de recuperar de la BDD- no usar en conjunto con CodeIgniter v4 Entity
- Dates:
$useTimestamps = false;$dateFormat = 'datetime';: valores permitidos: datetime, date, int$createdField = 'created_at';$updatedField = 'updated_at';$deletedField = 'deleted_at';
- Validacions:
$validationRules = [];$validationMessages = [];$skipValidation = false;$cleanValidationRules = true;cleanRules()- ???
- Callbacks
$allowCallbacks = true;$beforeInsert = [];$afterInsert = [];$beforeInsertBatch = [];$afterInsertBatch = [];$beforeUpdate = [];$afterUpdate = [];$beforeUpdateBatch = [];$afterUpdateBatch = [];$beforeFind = [];$afterFind = [];$beforeDelete = [];$afterDelete = [];
casts
protected array $casts = [ 'id' => 'int', 'birthdate' => '?datetime', 'hobbies' => 'json-array', 'active' => 'int-bool', ;
-
- csv usa
implode()yexplode() - datetime: formato configurado en el campo dateFormat de https://codeigniter.com/user_guide/database/configuration.html#database-config-explanation-of-values
- Un ? delante del campo indica que puede ser NULL
métodos built-in
initialize(): se ejecuta después del constructor para personalizar.initializefind($primaryKey | [$primaryKey,$primaryKey,…]):- retorna la fila (o filas) de las primaryKey indicadas (array si más de una)
- si no se especifica valor, retorna todas las filas.
findColumn(): retorna los valores de una coliumnafindAll(): retorna todos los valores (si hay criterios restrictivos, los aplica)findAll($limit,$offset)
first(): solo retorna el primer registrowithDeleted()asArray()asObject()← Entity
insert($data[,$bool])- $data: array de valores de campos
- $bool: si false, retorna un bool con el resultado de la operación
getInsertID()insertBatch()- $useAutoIncrement = false
update($primaryKey,$data)- permite actualizar varias filas a la vez https://codeigniter.com/user_guide/models/model.html#update
save($data): decide si hacer insert() o update() en función de si el array contiene un campo equivalente a la de la $primaryKey- instancias de
Timese convierten en cadenas con el formato definido en dateFormat['datetime'],dateFormat['date'] dentro de https://codeigniter.com/user_guide/database/configuration.html#database-config-explanation-of-values
- los métodos
savecomprueban la validez de la $primaryKeyvalidateID()
delete($primaryKey,[$primaryKey,$primaryKey,…])- con
$useSoftDeletes=true, se actualiza la columna indicada en$deletedField purgeDeleted()
chunk(): para procesar un gran volumen de datos de manera fraccionada
in-Model Validation
- verificar antes de guardar que cumple los requisitos indicados
- usa la propiedad
$validationRules(y complementa con$validationMessages:protected $validationRules = [ 'username' => 'required|max_length[30]|alpha_numeric_space|min_length[3]', 'email' => 'required|max_length[254]|valid_email|is_unique[users.email]', 'password' => 'required|max_length[255]|min_length[8]', 'pass_confirm' => 'required_with[password]|max_length[255]|matches[password]', ]; protected $validationMessages = [ 'email' => [ 'is_unique' => 'Sorry. That email has already been taken. Please choose another.', ], ];
setValidationRule($campo,$reglas)y su complementosetValidationMessage($campo,$array)setValidationRules([$campo⇒$reglas,$campo⇒$reglas])y su complementesetValidationMessages([$campo⇒$array])- si no valida, el Modelo retorna false. Se pueden recuperar los errores con el método
errors() getValidationRules($options)- $options: array con 2 claves, except o only para recoger las reglas de validación indicadas
- también se puede indicar un grupo de reglas de validaciones https://codeigniter.com/user_guide/libraries/validation.html#saving-validation-rules-to-config-file
placeholders
is_uniqueis_unique[tabla.campo,id,{id}único campo para el id={id} (si es el campo $primaryKey)
alpha*,stringfield_existsin_list,not_in_listmax_length,min_length,exact_lengthpermit_emptyrequired,required_with,required_withoutvalid_email,valid_emailsvalid_datevalid_json
protecting Fields
$allowedFieldsprotect(true|false)
Callbacks
allowCallbacks(false)
crear
namespace App\Models; use CodeIgniter\Model; class UserModel extends Model { // ... }