3

(请原谅我糟糕的英语。)我有 3 个表,比如BlogUseruser_blog

博客

CREATE TABLE `Blog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(64) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

用户

CREATE TABLE `User` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(256) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

用户博客

CREATE TABLE IF NOT EXISTS `user_blog` (
  `user_id` int(11) NOT NULL,
  `blog_id` int(11) NOT NULL,
  PRIMARY KEY (`user_id`,`blog_id`)
) ENGINE=InnoDB;

我已经在各自的 AR 模型中声明了它们的关系。

博客.php

public function relations() {
   return array(
      'users' => array(self::MANY_MANY, 'User', 'user_blog(blog_id, user_id)'),
   );
}

用户.php

public function relations() {
   return array(
      'blogs' => array(self::MANY_MANY, 'Blog', 'user_blog(user_id, blog_id)'),
   );
}

现在,我认为以下代码:

<?php
   $data = CHtml::listData(User::model()->findAll(), "id", "name");
   echo $form->dropDownList($blog,'users', $data, array('multiple'=>'multiple', 'size' => '5'));
?>

使用上面的代码,成功创建了一个多选的下拉列表,并成功从数据库中检索到数据,并成功突出显示了应该选择的项目。

但问题来了。我不知道如何实现保存/更新功能。无论我选择了什么选项,结果都不会保存回数据库。

有人可以帮忙吗?先感谢您。

4

1 回答 1

1

您应该使用 CRUD 生成器或自己这样做:

控制器:

public function actionUpdate($id)
{
   $model = $this->loadModel($id, 'User');

   if(isset($_POST['User']))
   {
      $model->setAttributes($_POST['Message']);
      if($model->validate()) 
      {
         if($model->save()) {
            //do something here, eg. view updated record
         }
      }
   }

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

查看/update.php

<?php $form = $this->beginWidget('GxActiveForm', array(
    'id' => 'user-form',
));
?>
<?php echo $form->errorSummary($model); ?>

        <div class="row">
        <?php echo $form->labelEx($model,'username'); ?>
        <?php echo $form->textField($model, 'username', array('maxlength' => 32)); ?>
        <?php echo $form->error($model,'username'); ?>
        </div><!-- row -->
...
...
<div class="row">
        <?php echo $form->labelEx($model,'users'); ?>
<?php
   $data = CHtml::listData(User::model()->findAll(), "id", "name");
   echo $form->dropDownList($blog,'users', $data, array('multiple'=>'multiple', 'size' => '5'));
?>
<?php echo $form->error($model,'users'); ?>
...
...
<?php
echo GxHtml::submitButton(Yii::t('app', 'Save'));
?>

Ps 阅读:http ://www.yiiframework.com/doc/guide/1.1/en/form.overview

于 2013-07-22T08:46:22.013 回答