我是杂货crud.i的新手,在insert_before_callback上面临逻辑操作的一些问题
我有一个产品表,当我要销售产品时,它会检查产品的可用性。如果它可用,那么它会将其插入数据库
$crud = new grocery_CRUD();
//$crud->set_subject('Guards');
$this->grocery_crud->set_table('chalan')
->set_subject('Chalan')
//->fields('Date','cid','pid','voucher','qnty','Amount','Paid Amount','Due Amount','Remarks')
->columns('cdate','cid','eid','pid','voucher','qnty','price','Amount','paid','Due Amount','Check','remark')
->display_as('cdate','Date')
->display_as('check','Check')
->display_as('cid','Customer Name')
->display_as('voucher','Chalan No.')
->display_as('eid','Employee Name')
->display_as('pid','Item Name')
->display_as('qnty','Quantity')
->display_as('price','Price')
->display_as('remark','Remark')
->set_relation('eid','employee','name')
->set_relation('cid','Customer','name')
->set_relation('pid','product','name')
->callback_column('Amount',array($this,'_total_amount'))
->callback_column('Due Amount',array($this,'_due_amount'))
->set_rules('qnty','Quantity','numeric')
->set_rules('eid','Employee','String')
->set_rules('pid','Product','String')
->set_rules('qnty','Quantity','numeric')
->set_rules('cdate','Date','date')
->callback_before_insert(array($this,'_checkAvaiability'))
->unset_delete();
//$crud->display_as('sec_guard_master_id','Guard Name');
$output = $this->grocery_crud->render();
//$data['viewName']="welcome";
$this->load->view('search',$output);
这是我对_checkAvaiability的逻辑
function _checkAvaiability($post_array){
$total=100; // just for test
if($post_array['qnty']>$total){
return false;
}
}
它在没有任何过滤的情况下运行,并且总是在产品超过总价值的情况下插入数据。如果有人解决此问题,将会很有帮助
答案 0 :(得分:1)
请注意,如果返回false,callback_before_insert
没有停止插入的行为(事实上,此回调必须返回一个数组,其中包含将在插入操作中使用的值,该数组将在回调处理)。
如果在插入之前需要一些逻辑验证(为了不允许它根据你的逻辑执行),你可以做两件事:
1)创建自定义验证规则并使用set_rules
添加
http://www.grocerycrud.com/documentation/options_functions/set_rules
我认为这比较容易实现
2)您可以使用callback_insert
实现完全自定义的插入操作。
此回调会转义CRUD的自动插入,并仅运行插入的回调。
http://www.grocerycrud.com/documentation/options_functions/callback_insert