我已经成功地制作了一个可搜索的下拉列表,在其中,每当我键入一些内容时,来自数据库的数据都会出现在下拉列表中,现在我想将这些选中的多个值存储在数据库中。
我在控制器中的代码

$temp = $model->package_item = $_POST['package_item'];
foreach($temp as $t)
{
    $model->package_item=$t;
}

Package_item是应用可搜索下拉列表的字段,我正在选择多个值,现在我如何将这些值保存在数据库中,以便拥有单个ID,但针对此ID,package_item将具有多个值,其余属性将重复。就像下面一样。
     id------package_item------package_description------package_name
     1--------cake------------ very cheap-------------get one buy one free
     1---------candles---------- very cheap-------------get one buy one free
     1----------fireworks--------very cheap-------------get one buy one free

我正在使用select2扩展名,下面是视图文件中的代码
  $this->widget('ext.select2.ESelect2', array(
      'name' => 'package_item',
      'data' => CHtml::listData(Package::model()->findAll(), 'id', 'package_item'), //the whole available list
      'htmlOptions' => array(
           'placeholder' => ' search packge item?',
           //'options' => $options, //the selected values
           'multiple' => 'multiple',
           'style'=>'width:530px',
       ),
  ));

提前谢谢

最佳答案

我的第一个答案误导了我,所以我把它删掉了,在这里再试一次。
你需要计划好你的数据库表。我在这里提个建议:
表项

itemId[PK]|       name     | price |...|
     1    |       cake     | 5.00
     2    |      candles   | 2.00
     3    |     fireworks  | 10.00
     4    | expensiveStuff | 50.00

表包
packageId[PK] |     name     |     description      | price |
     1        | full package |    super cheap       | 12.00
     2        | epic package | best value for money | 55.00

表包项目
packageId[PK][FK]|itemId[PK][FK]|amount
1 | 1 | 1
1 | 2 | 1
1 | 3 | 1
2 | 1 | 2
2 | 2 | 2
2 | 3 | 3
2 | 4 | 1

然后您可以这样查询您的包:
SELECT itemId FROM PackagesItems WHERE packageId = 1例如
这个答案的关键字是COMPOSITE PRIMARY KEY,您可以在第三个表中看到:有两个主键,它们也是指向其他表的外键。
使用SQL JOINS,您可以从其他两个表中检索信息。
如果你需要更多的信息,请缩小你的问题范围。你到底想知道什么?

10-08 06:54
查看更多