长话短说,我正在将Fullcalendar与Codeigniter一起使用。我正在根据事件的类别对日历中的事件进行颜色编码。
在管理控制台中,管理员可以添加事件类别并提供名称和颜色(从选择菜单中)。十六进制值已保存到数据库。
管理员添加事件时,他们会添加标题,描述,开始,结束和类别。
类别选项是“事件类别”中的一个选择菜单,是从数据库中提取的。
添加新事件时,我想使用事件类别名称并获取其颜色,然后将其与事件一起存储在数据库的最后一栏中,如下所示:
保存事件:
我正在使用codeigniter表单验证,如果所有字段都经过验证,则尝试从事件类别表中获取颜色并将其添加到$ save_data数组中的事件中:
public function add_save()
{
$this->form_validation->set_rules('title', 'Title', 'trim|required|max_length[500]');
$this->form_validation->set_rules('start', 'Start', 'trim|required');
$this->form_validation->set_rules('end', 'End', 'trim|required');
$this->form_validation->set_rules('description', 'Description', 'trim|required|max_length[1000]');
$this->form_validation->set_rules('category', 'Category', 'trim|required|max_length[100]');
$this->form_validation->set_rules('has_attendance', 'Has Attendance', 'trim|max_length[1]');
$this->form_validation->set_rules('is_recurring', 'Is Recurring', 'trim|required|max_length[1]');
if ($this->form_validation->run()) {
// I am adding this to capture color from event_category table
// 1. use the input category field from event
// 2. then I select all from event_category table
// 3. WHERE name is equal to the selected category name from input
// 4. The color is the reulting rows color field
$selected_event_category = $this->input->post('category');
$this->db->get('event_category');
$this->db->where('name',$selected_event_category);
$the_color = $this->db->get()->result()->row('color');
$save_data = [
'title' => $this->input->post('title'),
'start' => $this->input->post('start'),
'end' => $this->input->post('end'),
'description' => $this->input->post('description'),
'category' => $this->input->post('category'),
'has_attendance' => $this->input->post('has_attendance'),
'is_recurring' => $this->input->post('is_recurring'),
'color' => $the_color //I have added this from above query
];
$save_events = $this->model_events->store($save_data);
} else {
$this->data['success'] = false;
$this->data['message'] = validation_errors();
}
echo json_encode($this->data);
}
我尝试执行查询并将结果存储在名为$ the_color的变量中。然后,我将$ save_data数组中的此变量用作颜色值。
但是表格不会发布,并且我没有收到任何错误。该事件将不会保存,它根本不会进入数据库。
我希望有人可以帮我指出我要去哪里错了?
答案 0 :(得分:1)
这个怎么样?我认为如果期望数据库中有一条记录,则可以使用row()方法。而且,当您存储数据时,不必将其分配给变量。
模型文件中的方法:
public function getEventCategory($selected_event_category) {
$this->db->where('name', $selected_event_category);
$q = $this->db->get('event_category');
$q = $q->row();
return $q;
}
然后在控制器中
if ($this->form_validation->run()) {
// I am adding this to capture color from event_category table
// 1. use the input category field from event
// 2. then I select all from event_category table
// 3. WHERE name is equal to the selected category name from input
// 4. The color is the reulting rows color field
$selected_event_category = $this->input->post('category');
$event_category = $this->Your_model_here->getEventCategory($selected_event_categor);
$the_color = $event_category->color;
$save_data = [
'title' => $this->input->post('title'),
'start' => $this->input->post('start'),
'end' => $this->input->post('end'),
'description' => $this->input->post('description'),
'category' => $this->input->post('category'),
'has_attendance' => $this->input->post('has_attendance'),
'is_recurring' => $this->input->post('is_recurring'),
'color' => $the_color //I have added this from above query
];
$this->model_events->store($save_data);
} else {
$this->data['success'] = false;
$this->data['message'] = validation_errors();
}
echo json_encode($this->data);
}
另一个问题是您应该将查询传递给模型。 Codeigniter基于MVC模型,因此我们应避免在控制器中使用查询。