我正在 codeigniter 中开发一个网络平台(第一次使用 CI)来计算越来越多的不同产品的报价。
我面临的问题是我的每个产品都有不同的 10 多个选项集,但我只想将这些数据保存到数据库中的一个表中。我之前为每个产品使用了不同的表格,允许表格结构代表不同的选项集,但是随着我们不断增长的产品范围,这不是很可扩展。
经过一些研究后,似乎有一种解决方案是使用“序列化”功能将每个产品的所有发布数据(来自报价表)存储在一列中,然后在我想使用此数据时反序列化...
序列化数据是最好的方法吗?有人能提供一个简单的例子来说明如何处理表单提交的插入/检索数据吗?
非常感谢
编辑:只会搜索产品类型或唯一 ID。我的想法是要有一个像“id、product_type、product_options”这样的表,其中包含序列化数据的 product_options?
编辑 2:采用 EAV 方法似乎很不错。我习惯于查询并返回要传递到 View 中的单个结果对象(例如,$query->quote_ref
、$query->quote_date
)。当查询返回多行(每个属性一个)时,谁能指出正确的方向,说明如何使用单引号的数据?
最佳答案
正如您提到的,您不需要搜索序列化数据,那么是的,这种方法就可以了。我会选择 json_encode,因为这种形式的数据更易于阅读。
然后代码将取决于您的 DAL,但一个基本示例是:
$productOptions=array($_POST['option1'], $_POST['option2']);//etc will need to validate data
$databaseMapper->product_type='product type';
//your product_options column is suitable sized varchar
$databaseMapper->product_options=json_encode($productOptions);
$databaseMapper->save();
检索:
$databaseMapper->loadById(20);
//$productOptions is a standard php array
$productOptions = json_decode($databaseMapper->product_options, true);
编辑重新显示在您的 View 中。 这是 codeignitor 特定的(而以上不是)。 基于此处的代码:http://ellislab.com/codeigniter/user-guide/general/views.html
在你的 Controller 中:
//code similar to above to retrieve product options data, ideally contained within a model
$data['productOptions']=$productOptions;
$this->load->view('content', $data);
在你看来:
<ul>
<?php foreach ($productOptions as $option):?>
<li><?php echo $option;?></li>
<?php endforeach;?>
</ul>
关于php - 将对象插入 MySQL 数据库字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20658835/