CodeIgniter MVC 数据操作最佳方法

Posted

技术标签:

【中文标题】CodeIgniter MVC 数据操作最佳方法【英文标题】:CodeIgniter MVC data manipulation best approach 【发布时间】:2012-07-30 20:18:59 【问题描述】:

我正在使用 CodeIgniter 开发一个网站。这是基本的,除了它有一些巨大的表单(150 个字段)一些动态创建/锁定/预定义/删除等。

我在表单和数据库之间进行转换时遇到了麻烦,这当然非常复杂。我的意思是表单的提交在某些表格中插入了不止一行,甚至没有保存一些数据。 (一些单选按钮等)

我创建了一个非常大的对象,其中包含尽可能多的以表单输入名称命名的属性,以便使用 $_POST 数据填充:

foreach ($largeObj as $key=>$value)

  if (isset($_POST[$key]))
    $largeObj[$key]=$value; //mind the data escaping 
  

当然这只适用于一半的输入,对于其他的我需要做这样的事情:

$largeObj['tanks']=Array();
for ($i=0;$i<$_POST['nbrTanks'];$i++)
    $tank=new Tank();
    // some if's in order to set some properties
    $largeObj['tanks'][]=$tank;

然后我进行所有计算并准备我的 DTO,以便在每个表中插入相应的数据。顺便说一句,我使用 phpDAO 来映射数据库表,因为它们有点太大而无法编写整个 CRUD 操作。

有没有更好的方法?注释驱动或更有效的方式,因为我还需要用我的数据库中的数据填充整个表单。欢迎提出任何建议。

【问题讨论】:

【参考方案1】:

如果您有用于任一方法的输入列表,则可以执行以下操作:

##Array of items to be checked with `isset()`
$array_isset = array('field1', 'field2', 'field3');
foreach ($array_isset as $line) 
   #.... same thing you did before


$array_tank = array('field4', 'field5', 'field6'); 
foreach ($array_tank as $line) 
   $tank = new Tank()

如果我理解您的问题,上述方法将允许您按需要对其执行的操作对字段进行排序。

话虽如此,我有多个项目需要处理大量信息。我每次都发现,最好的方法是找到一种方法将原始数据放入数据库,并在以后执行计算。

这也很容易,因为在 CodeIgniter 中,你可以这样做:

$array = $this->input->post(NULL, True);
$this->db->insert('table', $array);

如果您的表单字段与您的数据库列名匹配。

如果您有数据列表,则可以将数据存储为逗号分隔的列表,如下所示:

$array = array('value1', 'value2', 'value3');
$insert_string = implode(',', $array);

并在您选择它时将其爆炸。

这可能不适用于您的情况,但在某些情况下确实有价值。

祝你申请顺利;希望我能帮上忙!

【讨论】:

谢谢.. 我已经在使用 $array = $this->input->post(NULL, True);至于与不可能的形式匹配的列。发生的逻辑太多了..我正在尝试使过渡更有效:表单--(保存和操作数据)-->大对象-----(准备DTO)---->数据库 那么我的第一个代码 sn-p 在我的回答中应该会让你更简单,所以你不会执行毫无意义的代码迭代。

以上是关于CodeIgniter MVC 数据操作最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 codeigniter 实现动态菜单/页眉/页脚的最佳方法

如何处理 Codeigniter 模板?

CodeIgniter:如何“突出显示”用户当前所在页面的链接?

015.CI4框架CodeIgniter数据库操作之:带参数查询数

在 CodeIgniter 中防止 SQL 注入的最佳方法是啥 [重复]

在 Codeigniter 中捕获 Doctrine 异常的最佳方法