如何更新主注册表和辅助multicheckbox填充表?

| 我有一个包含不同输入字段的注册表单,其中一个是多个复选框,以便用户可以决定他想从哪个国家接收信息。最后一个是这样创建的:
$pais = $this->createElement(\'multiCheckbox\', \'pais\');
$pais->setLabel(\'Pais\\es: \');
$pais->addMultioption(\'1\', \'Argentina\');
$pais->addMultioption(\'2\', \'Espa?a\');
$pais->addMultioption(\'3\', \'Brasil\');
$pais->addMultioption(\'4\', \'USA\');
$pais->addMultioption(\'5\', \'Italia\');
$this->addElement($pais);
在我的UserController中,我有以下操作来更新表\'users \':
public function createAction()
{
    $this->view->pageTitle = \'Create User\';
    require_once APPLICATION_PATH . \'/models/Users.php\';
    $userForm = new Form_User();
    if ($this->_request->isPost()) {
        if ($userForm->isValid($_POST)) {
            $userModel = new Model_User();
            $userMode->createUser(
                $userForm->getValue(\'email\'),
                $userForm->getValue(\'password\'),
                $userForm->getValue(\'url\'),
                $userForm->getValue(\'responsable\'),
                $userForm->getValue(\'role\')
            );
        return $this->_forward(\'list\');
        }
    }
$userForm->setAction(\'/user/create\');
$this->view->form = $userForm;
}
当然,哪个现在不考虑在multicheckbox中填充$ pais变量,也不在这里或模型中:
class Model_User extends Zend_Db_Table_Abstract 
{

protected $_name = \'users\';

public function createUser($email, $password, $url, $responsable, $role)
{
    // create a new row
        $rowUser = $this->createRow();
        if($rowUser) {
            // update the row values
            $rowUser->email = $email;
            $rowUser->password = md5($password);
            $rowUser->url = $url;
            $rowUser->responsable = $responsable;
            $rowUser->role = $role;
            $rowUser->save();
            //return the new user
            return $rowUser;
        } else {
        throw new Zend_Exception(\"El usuario no se ha podido crear!\");
            }
    }
}
我还有一个\'pais \'表,其中包含5个不同的国家,并且我正在为\'users_has_pais \'创建一个单独的模型,该模型是我为此在工作台中创建的表...但是我目前所做的工作没有任何结果。有人可以指出我正确的路径以在我更新“ users”表的同时更新“ users_has_pais”吗? 非常感谢任何对此有很好建议的人。 编辑:这是数据库模型,以防有人需要它弄清楚我在说什么 编辑2:
    public function createAction()
{
    $this->view->pageTitle = \'Create User\';
    require_once APPLICATION_PATH . \'/models/Users.php\';
    $userForm = new Form_User();
    if ($this->_request->isPost()) {
        if ($userForm->isValid($_POST)) {
            $userModel = new Model_User();
            $user = $userModel->createUser(
                    $userForm->getValue(\'email\'),
                    $userForm->getValue(\'password\'),
                    $userForm->getValue(\'url\'),
                    $userForm->getValue(\'responsable\'),
                    $userForm->getValue(\'role\')
            );
            $paises = $this->getRequest()->getParam(\'pais\');
            $userId = intval($user[\'id\']);

            require_once APPLICATION_PATH . \'/models/UserHasPais.php\';
            $paisesModel = new Model_UsersHasPais();
            $paisesModel->updateUserPais($userId, $paises);

            return $this->_forward(\'index\');
        }
    }
和users_has_pais模型:
class Model_UsersHasPais extends Zend_Db_Table_Abstract 
{     受保护的$ _name = \'users_has_pais \';
public function updateUserPais($id, array $paises)
{
    $row = ($r = $this->fetchRow(array(\'users_id = ?\' => $id))) ? $r : $this->createRow();

    foreach($paises as $pais){
        $row->users_id = $id;
        $row->pais_id = $pais;
        $row->save();
    }

}
}     
已邀请:
一种方法是先创建用户行,然后在为“ user_has_pais \”创建行时使用其ID。伪代码如下:
public function createAction()
{
    $this->view->pageTitle = \'Create User\';
    require_once APPLICATION_PATH . \'/models/Users.php\';
    $userForm = new Form_User();
    if ($this->_request->isPost()) {
        if ($userForm->isValid($_POST)) {
            $userModel = new Model_User();
           $newUserRow = $userMode->createUser(
                $userForm->getValue(\'email\'),
                $userForm->getValue(\'password\'),
                $userForm->getValue(\'url\'),
                $userForm->getValue(\'responsable\'),
                $userForm->getValue(\'role\')
            );

           $user_id = newUserRow->id;

           $checkBoxValues = $userForm->getValue(\'pais\');
           // $checkBoxValues should be an array where keys are option names and
           // values are values. If checkbox is not checked, than the value = 0;
           // At this moment I\'m not 100% sure of the real nature of the \'pais\' value,
           // but this is only an example. 

           // I also assume that the values of the checkboxfields correspond to IDs in 
           // \'pais\'.

           foreach ($checkBoxValues as $key => $pais_id) {
                    if (intval(pais_id) > 0) {
                        // if language was checked

                        // do insert into user_has_pais having $pais_id and $user_id.   

                    }
           }

        return $this->_forward(\'list\');
        }
    }
$userForm->setAction(\'/user/create\');
$this->view->form = $userForm;
}
如果需要,您也可以将所有这些都放入事务中。 希望这会有所帮助,或者至少您会指出正确的方向。     

要回复问题请先登录注册