6

Codeigniter フレームワークでは、「フォーム検証クラス」を使用して MYSQL データベースの Unique フィールドを検証できます。例:

$this->form_validation->set_rules('form_field', 'form_label', 'is_unique[table.field]');

完全に機能しますが、2 つのインデックスを持つテーブルのフィールドを検証する必要があります。例:

UNIQUE INDEX `id_aluno` (`id_aluno`, `ano`),

Codeigniter フレームワークはそれをネイティブに実行できますか?

4

4 に答える 4

4

CI組み合わせのケースが組み込まれているとは思いませんが、次のようにcallback_PK使用ますPK

$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;}

        }
于 2013-01-29T07:02:52.427 に答える
2
$this->form_validation->set_rules(
    'form_field', 
    'form_label', 
    'trima|is_unique[table1.field1],trim|required|is_unique[table.field2]');

使用する

'trima|is_unique[table1.field1],trim|required|is_unique[table.field2]' 

シングルコードで

于 2014-10-31T07:35:04.030 に答える
1

CodeIgniter でこの機能のネイティブ サポートの説明が見つかりませんでした。INSERT クエリの後で、データベース エラー番号を確認できます。例えば:

$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.';

この方法には欠点がありますが、確かに利点があります。追加の SELECT クエリを使用しないでください。

PSいくつかの異なる複合一意インデックスの場合、もちろん使用できますpreg_match(<pattern_with_index_name>, $this->db->_error_message());

于 2013-02-07T11:50:34.697 に答える