如何在杂货店的一些逻辑操作后插入数据

时间:2014-02-20 06:01:27

标签: php mysql codeigniter-2 grocery-crud

我是杂货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;
    }
}

它在没有任何过滤的情况下运行,并且总是在产品超过总价值的情况下插入数据。如果有人解决此问题,将会很有帮助

1 个答案:

答案 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