= CodeIgniter v4 Entity {{tag>codeigniter}} * [[https://codeigniter.com/user_guide/models/model.html#save]] == crear namespace App\Entities; use CodeIgniter\Entity\Entity; class User extends Entity { // ... } == usar namespace App\Models; use CodeIgniter\Model; class UserModel extends Model { protected $table = 'users'; protected $allowedFields = [ 'username', 'email', 'password', ]; protected $returnType = \App\Entities\User::class; protected $useTimestamps = true; } * save: $user = $userModel->find($id); // Display echo $user->username; echo $user->email; // Updating unset($user->username); if (! isset($user->username)) { $user->username = 'something new'; } $userModel->save($user); // Create $user = new \App\Entities\User(); $user->username = 'foo'; $user->email = 'foo@example.com'; $userModel->save($user); * fill: $data = $this->request->getPost(); # 1 $user = new \App\Entities\User(); $user->fill($data); $userModel->save($user); # 2 $user = new \App\Entities\User($data); $userModel->save($user); * ocultar atributos: namespace App\Entities; use CodeIgniter\Entity\Entity; class User extends Entity { protected $datamap = [ '_role' => '_role', ]; protected $attributes = [ '__secure' => 'On', '_role' => 'user', 'about' => '', ]; } $user = new User(['__secure' => 'Off', 'about' => 'Hi, I am John!', '_role' => 'admin']); echo 'Secure: ' . $user->__secure; print_r($user->toArray()); print_r($user->toRawArray()); /** * Output: * * Secure: Off * Array * ( * [about] => Hi, I am John! * [_role] => admin * ) * Array * ( * [__secure] => Off * [_role] => admin * [about] => Hi, I am John! * ) */ * ''$datamap'': hace los atributos invisibles (uso de _) visibles * renombra propiedades por si ha habido cambios en la tabla (y no cambiar la lógica de la aplicación):namespace App\Entities; use CodeIgniter\Entity\Entity; class User extends Entity { protected $attributes = [ 'id' => null, 'full_name' => null, // In the $attributes, the key is the db column name 'email' => null, 'password' => null, 'created_at' => null, 'updated_at' => null, ]; protected $datamap = [ // property_name => db_column_name 'name' => 'full_name', ]; } * ''toArray()'': no incluye atributos invisibles * ''toRawArray()'': lo incluye todo * añadiendo lógica:namespace App\Entities; use CodeIgniter\Entity\Entity; use CodeIgniter\I18n\Time; class User extends Entity { public function setPassword(string $pass) { $this->attributes['password'] = password_hash($pass, PASSWORD_BCRYPT); return $this; } public function setCreatedAt(string $dateString) { $this->attributes['created_at'] = new Time($dateString, 'UTC'); return $this; } public function getCreatedAt(string $format = 'Y-m-d H:i:s') { // Convert to CodeIgniter\I18n\Time object $this->attributes['created_at'] = $this->mutateDate($this->attributes['created_at']); $timezone = $this->timezone ?? app_timezone(); $this->attributes['created_at']->setTimezone($timezone); return $this->attributes['created_at']->format($format); } } * para acceder a un atributo usando funciones con lógica, se ha de respetar el formato **set** o **get** + **variable** en PascalCase. Cuando hagamos una llamada al atributo, se llamaran automaticamente. * si hemos "mapeado" en $datamap un atributo renombrado de la columna de la BDD, los setters y getters de ese campo han de ser los de la base de datos, no los del "alias".