我在GroceryCrud中有一个问题。
我想在一个表中插入数据。表是这样的:
id, card_no, site_code, site_no
card_no 是唯一的,我已经实现了它。
然而;我的问题是 site_code 和 site_no 只有在两个值匹配时才应该是唯一的。这意味着 site_code 101 且 site_no 102 ,我们尝试再次为两者插入相同的值应该拒绝它。如果我们其中一个值不同,则应允许它。
在这种情况下,我们在插入时将两个值都视为一个。
我希望我很清楚。
提前致谢。
答案 0 :(得分:3)
除了您的表设计登录之外,您还可以创建一个自定义回调函数来检查数据库中这些值的存在。 验证将在您的两个字段之一中进行,例如site_code:
public function _unique_code_no($site_code)
{
$CI =& get_instance();
$CI->form_validation->set_message('_unique_code_no', 'the values must be unique');
$site_no=$CI->input->post('id');
$query=$CI->db->query("select 1 from mytable where site_no=$site_no and site_code=$site_code");
if ($query->num_rows==0){
return TRUE;
}else{
return FALSE;
}
}
验证规则:
$this->form_validation->set_rules('site_code', 'Site code', 'required|_unique_code_no');
答案 1 :(得分:0)
听起来你应该查看桌子上的限制。
在这种情况下使用id列是否有充分的理由?如果没有,则应将其删除,然后将site_code和site_no都设置为主键。
使用(site_code,site_no)作为主键,您将无法插入这两个值的重复项。
答案 2 :(得分:0)
我认为你应该使用callback_column( string $column , mixed $callback )
方法。
请检查此链接CallBack Column