从下拉列表中选择Yii框架外键存储在数据库中

时间:2013-07-13 08:10:25

标签: php yii rdbms

yii framework我正在做一个小应用程序。我的数据库中有两个名为products and sales的表  产品表就是这样的

 ================
      product
   ================
   +   id          +
   + product_name  +
   + cost_price    +
   +selling_price  +
   + created_by    +
   + updated_by    +
   + created_at    +
   + updated_at    +
   +++++++++++++++++


   =================
          Sales
   =================
   + id            +
   + product_id     +
   + price          +
   + created_by    +
   + updated_by    +
   + created_at    +
   + updated_at    +
   +++++++++++++++++

对于以上两个表格,我用gii工具(crud)完成了模型和控制器 之后,我在销售模型中建立了关系。关系就像这样

  public function relations()
  {
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
      'product' => array(self::HAS_MANY,'Products','product_id'),
    );
  }

之后我只在Sales模型中渲染了Products模型。   销售控制器动作创建就像这样

 public function actionCreate()
  {
    $model=new Sales;
    $products = new Products;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST['Sales'], $_POST['Products']))
    {
      $model->attributes=$_POST['Sales'];
      $products->attributes = $_POST['Products'];
      $valid = $model->validate();
      $valid = $products->validate();

      if($valid)
      {
        $products->save(false);
        $model->product_id = $products->getPrimaryKey();
        $model->save(false);

        $this->redirect(array('view','id'=>$model->id));
      }
    }

    $this->render('create',array(
      'model'=>$model,
      'products' =>$products,
    ));
  }

并且在视图中我正在渲染像这样的文件

<div class="row">
    <?php echo $form->labelEx($products,'product_name'); ?>
    <?php echo $form->dropdownList($products,'product_name', CHtml::listData(Products::model()->findAll(), 'id', 'product_name'), array('empty'=>array('choose'=>'---Select One---'))); ?>
    <?php echo $form->error($products,'product_name'); ?>
  </div>

  <div class="row">
    <?php echo $form->labelEx($model,'price'); ?>
    <?php echo $form->textField($model,'price'); ?>
    <?php echo $form->error($model,'price'); ?>
  </div>

这里我正在进行products表中所有可用产品的下拉列表。在那之后我正在做保存总表格。

sales_id里面的sales_id显示为NULL。当从下拉列表中选择所选产品时,我希望在该位置使用外键。请告诉我我做错了什么。任何帮助和建议都会非常明显。谢谢

1 个答案:

答案 0 :(得分:0)

做这样的事情

<?php echo $form->dropdownList($products,'product_name', CHtml::listData(Products::model()->findAll(), 'id', 'product_name'), array('id'=>'productType','name'=>'productType'))); ?>

隐藏的变量

<?php echo CHtml::hiddenField('productTypeId','',array('class'=>'ProductTypeId')); ?>

用于选择id的javascript代码

 $('#listingType').change(function(){
        var productid=$('#productType').val()
        $(".ProductTypeId").val(productid);
         });

在控制器操作中

public function actionCreate(){
     $productId=$_POST['productTypeId'];
     //code to store in sales table 
}