In the Codeigniter Framework, I can validate an Unique field in the MYSQL Database using the "Form Validation Class". Exemple:
$this->form_validation->set_rules('form_field', 'form_label', 'is_unique[table.field]');
Work perfectly, but, I need validate a field from a table with 2 index. Exemple:
UNIQUE INDEX `id_aluno` (`id_aluno`, `ano`),
The Codeigniter Framework can do it natively?
I don't think that CI
has built-in case for combined PK
but I would use callback_ like this: but note that you have to send the second PK
as extra and the rule should be applied on the first $PK see callbacks for more info about that
$this->form_validation->set_rules('form_field', 'form_label', 'callback_combpk[$pk2]');
public function combpk($pk1, $pk2)
{
$this->db->where('field1', $pk1);
$this->db->where('field2', $pk2);
$result = $this->db->get('table');
if($result->num_rows() > 0)
{
$this->form_validation->set_message('combpk','something'); // set your message
return false;
}
else{ return true;}
}
$this->form_validation->set_rules(
'form_field',
'form_label',
'trima|is_unique[table1.field1],trim|required|is_unique[table.field2]');
use
'trima|is_unique[table1.field1],trim|required|is_unique[table.field2]'
in single code
Did not find the description of native support for this functionality in CodeIgniter. You can check after INSERT query the database error number. For example:
$last_id = $this->model->set();
if ($last_id === FALSE)
if ($this->db->_error_number() == 1062)
$this->data['message_error'] = 'Not unique.';
else
$this->data['message_error'] = 'Database error.';
This method has disadvantages, but certainly has an advantage - do not use additional SELECT query.
P.S. If several different composite unique indexes, then of course you can use preg_match(<pattern_with_index_name>, $this->db->_error_message());
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With