更新:このコードは現在、食料品のCRUDバージョン> = 1.4の一部であり、拡張機能を使用する必要はありません。詳細については、unique_fieldsのドキュメントを参照してください
私はそれをできるだけ簡単に説明しようとします:
1.まず、食料品のCRUDが1.3.3以下の場合は、次の小さな変更を使用する必要があります:https ://github.com/scoumbourdis/grocery-crud/commit/96ddc991a6ae500ba62303a321be42d75fb82cb2
2.次に、application/librariesにgrocery_crud_extended.phpという名前のファイルを作成します
3.ファイルapplication/libraries/grocery_crud_extended.phpで以下のコードをコピーします
<?php
class grocery_CRUD_extended extends grocery_CRUD
{
protected $_unique_fields = array();
public function unique_fields()
{
$args = func_get_args();
if(isset($args[0]) && is_array($args[0]))
{
$args = $args[0];
}
$this->_unique_fields = $args;
return $this;
}
protected function db_insert_validation()
{
$validation_result = (object)array('success'=>false);
$field_types = $this->get_field_types();
$unique_fields = $this->_unique_fields;
$add_fields = $this->get_add_fields();
if(!empty($unique_fields))
{
$form_validation = $this->form_validation();
foreach($add_fields as $add_field)
{
$field_name = $add_field->field_name;
if(in_array( $field_name, $unique_fields) )
{
$form_validation->set_rules( $field_name,
$field_types[$field_name]->display_as,
'is_unique['.$this->basic_db_table.'.'.$field_name.']');
}
}
if(!$form_validation->run())
{
$validation_result->error_message = $form_validation->error_string();
$validation_result->error_fields = $form_validation->_error_array;
return $validation_result;
}
}
return parent::db_insert_validation();
}
protected function db_update_validation()
{
$validation_result = (object)array('success'=>false);
$field_types = $this->get_field_types();
$unique_fields = $this->_unique_fields;
$add_fields = $this->get_add_fields();
if(!empty($unique_fields))
{
$form_validation = $this->form_validation();
$form_validation_check = false;
foreach($add_fields as $add_field)
{
$field_name = $add_field->field_name;
if(in_array( $field_name, $unique_fields) )
{
$state_info = $this->getStateInfo();
$primary_key = $this->get_primary_key();
$field_name_value = $_POST[$field_name];
$ci = &get_instance();
$previous_field_name_value =
$ci->db->where($primary_key,$state_info->primary_key)
->get($this->basic_db_table)->row()->$field_name;
if(!empty($previous_field_name_value) && $previous_field_name_value != $field_name_value) {
$form_validation->set_rules( $field_name,
$field_types[$field_name]->display_as,
'is_unique['.$this->basic_db_table.'.'.$field_name.']');
$form_validation_check = true;
}
}
}
if($form_validation_check && !$form_validation->run())
{
$validation_result->error_message = $form_validation->error_string();
$validation_result->error_fields = $form_validation->_error_array;
return $validation_result;
}
}
return parent::db_update_validation();
}
}
4.これで、次のようにgrocery_CRUD_extendedをロードする必要があります。
$this->load->library('grocery_CRUD');
$this->load->library('grocery_CRUD_extended');
次に、以下を使用します。
$crud = new grocery_CRUD_extended();
それ以外の:
$crud = new grocery_CRUD();
5.これで、次のように機能するunique_fieldsを簡単に作成できます。
$crud->unique_fields('field_name1','field_name2','field_name3');
あなたの場合:
$crud->unique_fields('equip_type_id','site_id');
とても簡単ですよね?
これは、食料品のCRUDのコアを実際に変更せずに、フィールドが一意であるかどうかをチェックしています。grocery_CRUDの代わりにgrocery_CRUD_extendedを使用して、通常どおり食料品のCRUDライブラリを更新できます。私はライブラリの作成者なので、これを食料品のCRUDバージョン1.4に含めようとします。したがって、将来、grocery_CRUD_extendedを使用する必要はありません。