小编Ken*_*lik的帖子

自定义is_unique_logical_key - 验证还是回调?

我可以针对以下问题提出设计建议:

我正在使用Codeigniter/Grocery_CRUD.

我的系统是多租户 - 不同的自治站点 - 在同一个客户端内.我有很多具有唯一逻辑键的表实例.一个这样的表结构是:

equip_items
id(pk)
equip_type_id(fk to equip_types)
site_id(fk to sites)
名称

其中(equip_type_id,site_id,name)一起是我的数据库中的唯一键.

问题是当使用grocery_CRUD表单添加或编辑打破此数据库规则的记录时 - 添加或编辑失败(由于数据库中的约束)但我得不到任何反馈.

我需要对is_unique form_validation规则进行修改,通过该规则我可以​​指定必须唯一的字段*s*.

问题:
如何指定规则?set_rules()用于给定字段,我有多个规则将应用于的字段.这是否意味着我应该放弃Form_validation模式?或者我是否遵循"匹配"规则模式并以某种方式指向其他字段?

也许一个回调函数会更好,但这意味着在每个模型中编写一个自定义函数,我在这里有这个问题,这是9个表.在一个地方(扩展form_validation)似乎要好得多.

我错过了已经解决了这个问题的codeigniter或grocery_CRUD中的东西吗?

任何您可能有的建议/意见将不胜感激.

编辑: 实际上似乎Johnny提供的解决方案并没有达到标记 - 它强制unique_fields()中的每个字段独立地唯一 - 与在每个字段上设置is_unique()相同.我的问题是,在我的场景中,这些字段是复合唯一键(但不是主键).我不知道它是否重要但是对原始问题陈述更进一步:1)site_id是一个'隐藏'field_type - 我不希望我的用户担心他们在不同的网站上所以我正在处理后面的site_id场景.2)处理equip_status_id属性(不是唯一键的一部分).3)我对所有这些外键属性都有set_relations(),而grocery_CRUD对我有好处.

编辑2 我用回调解决了这个问题.

php codeigniter-2 grocery-crud

3
推荐指数
1
解决办法
4713
查看次数

将javascript函数添加到foodcrud添加或编辑表单

是否可以将javascript函数添加到grocery_CRUD的添加/编辑表单中?

例如,当用户在添加或编辑记录时键入特定字段时,我想在keydown事件上执行javascript.

如果是这样,怎么样?

codeigniter grocery-crud

3
推荐指数
1
解决办法
5369
查看次数

PHP父级和子类DB操作

PHP和OOP的新手所以请耐心等待......在设计和编写我的第一个PHP和OOP网站之后,我已经处于乐观的早期阶段,经过一生的写作糟糕的M $ VBA垃圾.

我有一个类"User",它有一个带有相关数据库调用的save方法等...(实际上我有DB和DBUtils类来处理连接和CRUD - 我的业务类只调用DB Utils上的select,update,delete方法并传递数据的关联数组)

Anywho ...我的"用户"类由"Admin"类扩展,除了"User"yada yada之外还有一些额外的属性......

在"管理员"中处理保存方法的最佳方法是什么?我知道如果我向Admin类添加一个save方法,它将取代User上的那个,但我不希望它.我想在Admin上编写save方法,只处理特定于Admin对象的属性等,以及继承自"User"的属性,以便在User save方法中处理.

那有意义吗?它是我正在寻找的特定OOP模式吗?任何有关如何设计和构造此代码的帮助或指导将不胜感激.

编辑:哇!感谢下面的所有答案.不确定哪个是我的首选.我将不得不做一些游戏......

php database oop inheritance

1
推荐指数
1
解决办法
1397
查看次数

如何在编辑时隐藏字段,在添加项目时可见?

我在编辑添加条目时必须可见的条目时尝试隐藏字段时遇到问题.

我的表结构如下:

equip_items
--------------
id (pk)
equip_type_id (fk to equip_types)
site_id (fk to sites)
equip_status_id (fk to equip_status)
name
Run Code Online (Sandbox Code Playgroud)

(equip_type_id,site_id,name)是db中的复合唯一键约束.我在name字段上实现了一个回调,它处理了unique_CRUD对唯一约束的验证 - 考虑编辑现有或添加新的equip_items.

function unique_equip_item_check($str, $edited_equip_item_id){
$var = $this->Equip_Item_model->is_unique_except($edited_equip_item_id,$this->input->post('site_id'),$this->input->post('equip_type_id'),$this->input->post('name'));

if ($var == FALSE) {
$s = 'You already have an equipment item of this type with this name.';
$this->form_validation->set_message('unique_equip_item_check', $s);
return FALSE;
} else {
return TRUE;
}
}
Run Code Online (Sandbox Code Playgroud)

我将site_id和equip_type_id设置为隐藏字段,因为我不希望用户更改这些 - 没问题.

$crud->field_type('site_id', 'hidden', $site_id);
$crud->field_type('equip_status_id', 'hidden', iQS_EqStatus_InUse);
Run Code Online (Sandbox Code Playgroud)

当用户添加equip_item时,我希望他们能够从类型列表中选择equip_type - 没问题,这是默认的grocery_CRUD行为.

$crud->add_fields('equip_status_id', 'site_id', 'equip_type_id', 'name');
Run Code Online (Sandbox Code Playgroud)

当用户编辑equip_item时,我不希望用户能够编辑equip_type.我认为没问题我可以设置edit_fields以排除equip_type_id:

$crud->edit_fields('equip_status_id', 'site_id', 'name', 'barcode_no');
Run Code Online (Sandbox Code Playgroud)

但是这会对我的验证回调造成严重破坏,因为equip_type_id字段的值在编辑表单上没有,我的验证例程显然需要它. …

codeigniter hidden-field grocery-crud

1
推荐指数
1
解决办法
6984
查看次数