drop-down-menu - Yii - 从具有多项选择的下拉列表中将数据保存回多对多关系数据库

标签 drop-down-menu yii many-to-many

(请原谅我糟糕的英语。) 我有 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模型中声明了他们的关系。

Blog.php

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

User.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'));
?>

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

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

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

最佳答案

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

Controller :

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'));
?>

请阅读以下内容:http://www.yiiframework.com/doc/guide/1.1/en/form.overview

关于drop-down-menu - Yii - 从具有多项选择的下拉列表中将数据保存回多对多关系数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17782766/

相关文章:

php - yii 调用身份验证访问规则部分中未定义的方法

many-to-many - Spring Data JPA 多对多保存设置

java - 获取多对多连接中的数据

javascript - 使用 Laravel 动态下拉菜单

javascript - 导航栏

php - 使用大型数据库时,Ajax 请求需要很长时间才能完成

ruby-on-rails - 验证自引用关联不会链接回 rails 中的原始实例

java - 如何在 Wicket 中创建下拉列表?

javascript - vue.js 的 <template> 语法不起作用

php - 为什么 Yii2 dateTime() 功能不写入时间?