select2多个值存储在数据库中

时间:2015-09-07 11:43:49

标签: mysql database yii jquery-select2

我已经成功制作了一个可搜索的下拉列表,每当我输入内容时,数据库中的数据都会出现在下拉列表中,现在我想在数据库中存储这些被选中的多个值。

我在控制器中的代码

$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',
       ),
  ));

提前致谢

1 个答案:

答案 0 :(得分:0)

我的第一个答案非常具有误导性,所以我将其删除并在此处再试一次。

您需要规划数据库表。我在这里提出建议:

项目

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

PackagesItems

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,您可以从其他两个表中检索信息。 如果您需要更多信息,请缩小范围。你究竟想知道什么?