gpt4 book ai didi

php - codeigniter - 关系表

转载 作者:行者123 更新时间:2023-11-29 11:15:49 26 4
gpt4 key购买 nike

我是第一次使用 codeigniter。我习惯了 MVC,但只习惯了 .net,不习惯 PHP。

所以,我有一个表“类别”、一个表“国家”和一个表“类别国家”。假设前两个表只有“id”和“name”,第三个表有“country_id”和“category_id”。一个类别可以分配多个国家/地区。

我已准备好模型、 View 和 Controller 来创建和编辑类别。

编辑功能

型号:

function get_category_by_id($id)
{
$query = $this->db->get_where('categories',array('id'=>$id));
if($query->num_rows()<=0)
{
echo 'Invalid category id';die;
}
else
{
return $query->row();
}
}

查看:

<form class="form-horizontal" id="addcategory" action="<?php echo site_url('admin/category/updatecategory');?>" method="post">
<input type="hidden" name="id" value="<?php echo $post->id;?>"/>
<div class="form-group">
<label class="col-sm-3 col-md-3 control-label"><?php echo lang_key_admin('name');?>:</label>
<div class="col-sm-4 col-md-4 controls">
<input type="text" name="name" value="<?php echo $post->name;?>" placeholder="<?php echo lang_key_admin('type_something');?>" class="form-control input-sm" >
<?php echo form_error('title'); ?>
</div>
</div>
</form>

Controller :

public function edit($id='')
{
$value['post'] = $this->category_model->get_category_by_id($id);
$data['title'] = lang_key_admin('edit_category');
$data['content'] = load_admin_view('categories/editcategory_view',$value,TRUE);
load_admin_view('template/template_view',$data);
}

public function updatecategory()
{
$this->form_validation->set_rules('name', lang_key_admin('name'), 'required');

if ($this->form_validation->run() == FALSE)
{
$id = $this->input->post('id');
$this->editcategory($id);
}
else
{
$id = $this->input->post('id');

$data = array();
$data['name'] = $this->input->post('name');

$this->category_model->update_category($data,$id);
$this->session->set_flashdata('msg', '<div class="alert alert-success">'.lang_key_admin('data_updated').'</div>');

redirect(site_url('admin/category/edit/'.$id));
}
}

现在我想向该 View 添加一个选择列表(多项选择),以便我可以选择要分配给该类别的国家/地区,并将关系存储在第三个表中。我该怎么做?我必须显示列表中的所有国家/地区,并能够选择我想要的国家/地区。我还希望页面加载时已分配的国家/地区在列表中显示为选中状态。

最佳答案

我不会为您编写代码,但会提供一些指导,希望对您有所帮助。

如果您熟悉 Codeigniter 的 Form Helper.,您的工作将会更加轻松。特别是,要为表单创建多选字段,请使用帮助程序的 form_multiselect()功能。

您将需要两个模型函数来收集两个结果集:一个用于获取国家/地区的完整列表,第二个用于获取与第三个表中的特定类别匹配的国家/地区 ID 数组(让我们将该表命名为 交叉引用)。第一个填充多选,第二个用于指示多选中当前选定的国家/地区集。

这些结果很容易传递给 form_multiselect() ,就像任何表单控件的所有属性(引导类,对吧?)。

有多种方法可以处理从表单发布的多选。这个tutorial可能会有帮助。 (向下滚动以进行多选讨论。)解析所选国家/地区后,将需要插入或更新crossref 模型函数。

与回答您的问题无关,但我注意到您可能希望考虑一下。您的模型使用 echo ,这可以说是对 MVC 最佳实践的突破。一般来说, Controller 应该根据其启动的任何处理的结果来决定显示内容。因此,您的模型可能应该执行此操作,而不是调用 echodie

function get_category_by_id($id)
{
$query = $this->db->get_where('categories',array('id'=>$id));
return $query->num_rows() > 0) ? $query->row() : NULL;
}

如果没有结果,将返回 NULL。然后 Controller 必须检查模型的返回并使用react

public function edit($id='')
{
$category = $this->category_model->get_category_by_id($id);
if(isset($category))
{
$value['post'] = $category;
$data['title'] = lang_key_admin('edit_category');
$data['content'] = load_admin_view('categories/editcategory_view',$value,TRUE);
load_admin_view('template/template_view',$data);
}
else
{
//handle the error (an "error" view?)
}
}

使用 CodeIgniter 时,请勿调用 php 函数 exitdie!

为什么?在 Controller 完成执行之前,框架不会向浏览器输出任何内容。调用这两个函数中的任何一个都会使框架短路,并且在您的代码中,将不会显示 echo 'Invalid Category id'; 发送的消息。 Controller 完成后,CI 还会做一些其他杂务。

在开发期间使用 exitdie 是可以的,但在生产站点中则不行。

关于php - codeigniter - 关系表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39792090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com