如何在CakePHP中将两个HABTM保存在一个表单中?

时间:2013-01-04 18:55:21

标签: cakephp

我有两个模型Business和User。它们与HABTM关系有关。

所有功能都与烘焙的控制器,模型和视图一起使用。

现在我正在尝试将两个模型合并为一个表单,以便用户可以使用用户信息输入商家名称。

以下是表格:



    Form->create('User'); ?>
    
    
    Form->input('Business.name', array('label' => __('Business name')));
    echo $this->Form->input('User.email');
    echo $this->Form->input('User.firstname');
    echo $this->Form->input('User.lastname');
    echo $this->Form->input('User.password');
    echo $this->Form->input('User.phone_cell', array('type' => 'text'));
    echo $this->Form->input('User.phone_home', array('type' => 'text'));
    echo $this->Form->input('User.phone_work', array('type' => 'text'));
    ?>
    
    Form->end(__('Submit')); ?>
    

我能够使其工作的唯一方法是首先保存用户,然后通过添加具有新ID的用户数组来获取用户ID并保存业务。



    if ($this->User->save($this->request->data)) {
        $this->request->data['User'] = array('User' => array(0 => $this->User->id));
    if ($this->User->Business->save($this->request->data)) {
        // User saved
    } else {
        // User not saved
    }
    } else {
        $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
    }

我尝试了saveAll方法但没有成功。有可能优化CakePHP方式进行单次保存吗?

由于

1 个答案:

答案 0 :(得分:0)

我能够使用名为UserGroup的几个模型让自己工作。以下是我的代码中的一些剪辑,以显示我是如何做到的:

UsersController.php

public function edit($id = null) 
{
    $this->User->id = $id;

    if ($this->request->is('get')) {
        //On page load load the user data
        $this->request->data = $this->User->read();
    } else {
       //Saving
       if ($this->User->save($this->data)) {
           //....snipped...
        } else {
           $this->Session->setFlash('Unable to update the user.');
        }
    }

    //Build $groups array for form
    // Only admins can assign admin rights
    if ($this->isMember('Admin')) {
        $this->set('groups',$this->User->Group->find('list'));
    } else {
        $this->set('groups',$this->User->Group->find('list',array(
            'conditions' => array(
                'Group.name !=' => 'Admin'
            )
        )));
    }
    //...more snipping...
}

edit.ctp(查看)

    echo $this->Form->create('User', array('action' => 'edit'));
    echo $this->Form->input('User.username');
    echo $this->Form->input('Group',array(
            'type' => 'select',
            'multiple' => true,
            'label' => "Group (Select multiple entries with CTRL)",
            'size' => count($groups)
        )
    );
    //More snipping

通过该示例,您如何验证输入的Business.name是否有效并且可以与HABTM关系匹配?在这种情况下,我强制选择列表。我的模型非常简单,所以我没有包含它。

您对debug($this->data);debug($this->request->data)的输出是什么?