-
flux1on Junior Member
 
-
Posts: 15
Threads: 7
Joined: Apr 2020
Reputation:
0
By user guide, i can be automatically updated field created,modified and deleted date with set name field on variable CI 4.
My Table :
My Model :
PHP Code: <?php namespace App\Models;
use CodeIgniter\Model; use Config\Services;
class UsersModel extends Model { protected $table = 'sm_user'; protected $primaryKey = 'user_no'; protected $useAutoIncrement = true; protected $returnType = 'array'; protected $allowedFields = [ 'user_company', 'user_name', 'user_email', 'user_password', 'user_phone', 'user_register_token', 'user_register_flag', 'user_reset_token', 'user_reset_flag', 'user_lastlogin', 'user_created_by', 'user_modified_by', 'user_deleted_by', 'user_locked', ]; protected $useSoftDeletes = true; protected $useTimestamps = true; protected $createdField = 'user_created_date'; protected $updatedField = 'user_modified_date'; protected $deletedField = 'user_deleted_date'; protected $beforeInsert = ['hashPassword','registerToken','resetToken']; protected $beforeUpdate = ['hashPassword']; protected $allowCallbacks = true; protected $validationRules = [ 'user_company' => 'required|integer', 'user_name' => 'required|alpha_numeric_space|max_length[60]', 'user_email' => 'required|valid_email|is_unique[sm_user.user_email]', 'user_password' => 'required|min_length[12]|checkCombinationPasswords', 'user_phone' => 'required|numeric|max_length[15]', ]; protected $validationMessages = []; protected $skipValidation = false;
public function __construct() { helper('date');
$this->db = \Config\Database::connect(); $this->builder = $this->db->table($this->table); $this->encrypter = Services::encrypter(); }
protected function checkCombinationPasswords(string $password = ''): bool { if(! empty($password)){ $uppercase = preg_match('@[A-Z]@', $password); $lowercase = preg_match('@[a-z]@', $password); $number = preg_match('@[0-9]@', $password); $specialChars = preg_match('@[^\w]@', $password);
if(!$uppercase || !$lowercase || !$number || !$specialChars || strlen($password) < 12) { return false; }
return true; }
return false; }
/** * ----------------------------------------- * Hash Password * ----------------------------------------- * * Function Hash Password beforeInsert * and beforeUpdate * * @param array $data Data Models */ protected function hashPassword(array $data): array { if (! isset($data['data']['user_password'])) { return $data; }
$data['data']['user_password'] = password_hash($data['data']['user_password'], PASSWORD_DEFAULT); return $data; }
/** * ----------------------------------------- * Generate Token - Register * ----------------------------------------- * * Function Generate Token Register beforeInsert * * @param array $data Data Models */ protected function registerToken(array $data): array { if (! isset($data['data']['user_register_token'])) { return $data; }
$data['data']['user_register_token'] = $this->encrypter->encrypt($data['data']['user_register_token']); return $data; }
/** * ----------------------------------------- * Generate Token - Reset * ----------------------------------------- * * Function Generate Token Reset * beforeInsert * * @param array $data Data Models */ protected function resetToken(array $data): array { if (! isset($data['data']['user_reset_token'])) { return $data; }
$data['data']['user_reset_token'] = $this->encrypter->encrypt($data['data']['user_reset_token']); return $data; }
/** * ----------------------------------------- * Finding Data * ----------------------------------------- * * @param string $selectParams Selected Field with Delimeter Commma (,) * @param array $whereParams More Where with Array Like ['field_name' => 'value'] or ['field_name >' => 3] * @param array $joinParams Join more with Array Like * [ * 1 => [ * 'to' => [ * 'table' => 'tb_field, * 'condition' => 'tb_field.id = tb_fieldother.id' * ], * 'type' => 'inner', * ], * ] */ public function findData(string $selectParams = '*', array $whereParams = [], array $joinParams = []): array { $this->builder->select($selectParams);
if (count($joinParams) > 0) { foreach ($joinParams as $index => $val) { $this->builder->join($joinParams[$index]['to']['table'], $joinParams[$index]['to']['condition'], $joinParams[$index]['type']); } }
if (count($whereParams) > 0) { $this->builder->where($whereParams); }
$findData = $this->builder->get();
return $findData->getResultArray(); }
/** * ----------------------------------------- * Save Data * ----------------------------------------- * * Simpan Data User. * * @param array $data Data User */ public function saveData(array $data = []) { return $this->builder->insert($data); }
/** * ----------------------------------------- * Delete Data * ----------------------------------------- * * Delete Data User. * * @param int $id Data User * @param int $byDeleted Deleted by User */ public function deleteData(int $id = 0) { return $this->builder->delete(intval($id)); } }
My Result Data in row 2 :
Anyone can help is wrong in my type data in database or my models? And why $beforeInsert & $beforeUpdate cant work?
-
kenjis Administrator
      
-
Posts: 3,671
Threads: 96
Joined: Oct 2014
Reputation:
230
Because you are using Builder's method.
CodeIgniter Model is kind of wrapper for Builder, but if you want to use Model's functionality,
you must use Model's methods.
For example:
PHP Code: public function saveData(array $data = []) { return $this->insert($data); }
-
flux1on Junior Member
 
-
Posts: 15
Threads: 7
Joined: Apr 2020
Reputation:
0
06-02-2022, 12:25 AM
(This post was last modified: 06-02-2022, 12:28 AM by flux1on.)
(06-01-2022, 10:04 PM)kenjis Wrote: Because you are using Builder's method.
CodeIgniter Model is kind of wrapper for Builder, but if you want to use Model's functionality,
you must use Model's methods.
For example:
PHP Code: public function saveData(array $data = []) { return $this->insert($data); }
Okayy thankyou, now automatically updated. But beforeInsert & beforeUpdate cant work, why?
PHP Code: <?php namespace App\Models;
use CodeIgniter\Model; use Config\Services;
class UsersModel extends Model { protected $table = 'sm_user'; protected $primaryKey = 'user_no'; protected $useAutoIncrement = true; protected $returnType = 'array'; protected $allowedFields = [ 'user_company', 'user_name', 'user_email', 'user_password', 'user_phone', 'user_register_token', 'user_register_flag', 'user_reset_token', 'user_reset_flag', 'user_lastlogin', 'user_created_by', 'user_modified_by', 'user_deleted_by', 'user_locked', ]; protected $useSoftDeletes = true; protected $useTimestamps = true; protected $createdField = 'user_created_date'; protected $updatedField = 'user_modified_date'; protected $deletedField = 'user_deleted_date'; protected $beforeInsert = ['hashPassword','registerToken','resetToken']; protected $beforeUpdate = ['hashPassword']; protected $allowCallbacks = true; protected $validationRules = []; protected $validationMessages = []; protected $skipValidation = false;
public function __construct() { helper('date');
$this->db = \Config\Database::connect(); $this->builder = $this->db->table($this->table); $this->encrypter = Services::encrypter(); }
/** * ----------------------------------------- * Hash Password * ----------------------------------------- * * Function Hash Password beforeInsert * and beforeUpdate * * @param array $data Data Models */ protected function hashPassword(array $data): array { if (! isset($data['data']['user_password'])) { return $data; }
$data['data']['user_password'] = password_hash($data['data']['user_password'], PASSWORD_DEFAULT); return $data; }
/** * ----------------------------------------- * Generate Token - Register * ----------------------------------------- * * Function Generate Token Register beforeInsert * * @param array $data Data Models */ protected function registerToken(array $data): array { if (! isset($data['data']['user_register_token'])) { return $data; }
$data['data']['user_register_token'] = $this->encrypter->encrypt($data['data']['user_register_token']); return $data; }
/** * ----------------------------------------- * Generate Token - Reset * ----------------------------------------- * * Function Generate Token Reset * beforeInsert * * @param array $data Data Models */ protected function resetToken(array $data): array { if (! isset($data['data']['user_reset_token'])) { return $data; }
$data['data']['user_reset_token'] = $this->encrypter->encrypt($data['data']['user_reset_token']); return $data; }
/** * ----------------------------------------- * Finding Data * ----------------------------------------- * * @param string $selectParams Selected Field with Delimeter Commma (,) * @param array $whereParams More Where with Array Like ['field_name' => 'value'] or ['field_name >' => 3] * @param array $joinParams Join more with Array Like * [ * 1 => [ * 'to' => [ * 'table' => 'tb_field, * 'condition' => 'tb_field.id = tb_fieldother.id' * ], * 'type' => 'inner', * ], * ] */ public function findData(string $selectParams = '*', array $whereParams = [], array $joinParams = []): array { $this->builder->select($selectParams);
if (count($joinParams) > 0) { foreach ($joinParams as $index => $val) { $this->builder->join($joinParams[$index]['to']['table'], $joinParams[$index]['to']['condition'], $joinParams[$index]['type']); } }
if (count($whereParams) > 0) { $this->builder->where($whereParams); }
$findData = $this->builder->get();
return $findData->getResultArray(); }
/** * ----------------------------------------- * Save Data * ----------------------------------------- * * Simpan Data User. * * @param array $data Data User */ public function saveData(array $data = []) { return $this->insert($data); }
/** * ----------------------------------------- * Delete Data * ----------------------------------------- * * Delete Data User. * * @param int $id Data User * @param int $byDeleted Deleted by User */ public function deleteData(int $id = 0) { return $this->delete(intval($id)); } }
-
flux1on Junior Member
 
-
Posts: 15
Threads: 7
Joined: Apr 2020
Reputation:
0
(06-02-2022, 02:30 AM)kenjis Wrote: (06-02-2022, 12:25 AM)flux1on Wrote: But beforeInsert & beforeUpdate cant work, why?
I don't know. It seems no problems.
The constructor has weird code. Should be like this.
But I don't know it has something to do with beforeInsert.
PHP Code: public function __construct() { parent::__construct();
helper('date');
$this->encrypter = Services::encrypter(); }
Okay thankyou to help solved my problem
Now Code
PHP Code: protected $beforeInsert = ['hashPassword','registerToken']; protected $beforeUpdate = ['hashPassword','resetToken']; protected $allowCallbacks = true; protected $validationRules = []; protected $validationMessages = []; protected $skipValidation = true;
public function __construct() { parent::__construct();
helper('date');
$this->builder = $this->db->table($this->table); $this->encrypter = Services::encrypter(); }
/** * ----------------------------------------- * Hash Password * ----------------------------------------- * * Function Hash Password beforeInsert * and beforeUpdate * * @param array $data Data Models */ protected function hashPassword(array $data): array { if (! isset($data['data']['user_password'])) { return $data; }
$data['data']['user_password'] = password_hash($data['data']['user_password'], PASSWORD_DEFAULT); return $data; }
/** * ----------------------------------------- * Generate Token - Register * ----------------------------------------- * * Function Generate Token Register beforeInsert * * @param array $data Data Models */ protected function registerToken(array $data): array { if (! isset($data['data']['user_register_token'])) { return $data; }
$data['data']['user_register_token'] = $this->encrypter->encrypt($data['data']['user_register_token']); return $data; }
/** * ----------------------------------------- * Generate Token - Reset * ----------------------------------------- * * Function Generate Token Reset * beforeInsert * * @param array $data Data Models */ protected function resetToken(array $data): array { if (! isset($data['data']['user_reset_token'])) { return $data; }
$data['data']['user_reset_token'] = $this->encrypter->encrypt($data['data']['user_reset_token']); return $data; }
|