我正在尝试做一个callback_before_insert,这是我的脚本:
public function brandstof()
{
$crud = new grocery_CRUD();
$crud->set_theme('datatables');
$crud->set_table('invoer');
$crud->set_subject('Brandstof');
$crud->required_fields('datum', 'aant_km', 'ltr', 'prijs');
$crud->fields('datum', 'aant_dagen', 'aant_km', 'ltr', 'prijs');
$crud->order_by('datum', 'desc');
$crud->callback_before_insert(array($this,'calculate'));
$output = $crud->render();
$this->_example_output($output);
}
function calculate($post_array)
{
$post_array['tot'] = 100;
$post_array['een_op'] = $post_array['aant_km'] / $post_array['ltr'];
$post_array['ltr_per_100_km'] = $post_array['ltr'] / $post_array['aant_km'];
return $post_array;
}
问题是他只添加了常规字段,即我在myselfe中输入的字段。 但是没有插入被计算的那些
出于测试目的,我添加了这个:
$post_array['tot'] = 100;
只需将字段'tot'设为100即可 在我计算字段
时插入这个phpmyadmin givenull值我看不出我做错了什么
答案 0 :(得分:2)
这有点棘手。
因此,出于安全原因,在杂货店CRUD中,您需要在fields方法中指定要保存的所有字段。然后,您可以将此类型设为invisible。正如您在隐藏字段的文档中看到的那样,callback_before_insert有一个示例。所以在你的情况下,你只需要:
public function brandstof()
{
$crud = new grocery_CRUD();
$crud->set_theme('datatables');
$crud->set_table('invoer');
$crud->set_subject('Brandstof');
$crud->required_fields('datum', 'aant_km', 'ltr', 'prijs');
$crud->fields('datum', 'aant_dagen', 'aant_km', 'ltr',
'prijs','tot','een_op','ltr_per_100_km'); //Don't forget to add these fields
$crud->field_type('tot','invisible');
$crud->field_type('een_op','invisible');
$crud->field_type('ltr_per_100_km','invisible');
$crud->order_by('datum', 'desc');
$crud->callback_before_insert(array($this,'calculate'));
$output = $crud->render();
$this->_example_output($output);
}
function calculate($post_array)
{
$post_array['tot'] = 100;
$post_array['een_op'] = $post_array['aant_km'] / $post_array['ltr'];
$post_array['ltr_per_100_km'] = $post_array['ltr'] / $post_array['aant_km'];
return $post_array;
}