【问题标题】:Two field as one unique field in Grocery CrudGrocery Crud 中的两个字段作为一个独特字段
【发布时间】:2013-03-07 20:01:30
【问题描述】:
我在 GroceryCrud 有一个问题。
我想在一张表中插入数据。表格是这样的:
id, card_no, site_code, site_no
card_no 是独一无二的,我已经实现了它。
但是;我的问题是 site_code 和 site_no 应该是唯一的,只有两个值匹配。这意味着 site_code 是 101 并且 site_no 是 102 并且我们尝试再次为两者插入相同的值是应该拒绝它。如果我们其中一个值不同,它应该允许它。
在这种情况下,我们在插入时将这两个值视为一个。
我希望我很清楚。
提前致谢。
【问题讨论】:
标签:
php
codeigniter
codeigniter-2
grocery-crud
【解决方案1】:
除了您的表设计登录之外,您还可以创建一个自定义回调函数来检查这些值在您的数据库中是否存在。
验证将在您的 2 个字段之一中进行,例如 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');
【解决方案2】:
听起来你应该检查一下桌子上的约束。
在这种情况下是否有充分的理由使用 id 列?如果没有,则应将其删除,然后将 site_code 和 site_no 都设置为主键。
以 (site_code,site_no) 作为主键,您将无法插入这两个值的重复项。
【解决方案3】:
我认为你应该使用callback_column( string $column , mixed $callback ) 方法。
检查此链接CallBack Column