Cakephp保存不保存关联模型

时间:2013-09-19 09:26:07

标签: php cakephp

我有两张表UsersClients

用户表格看起来像这样:

  id (primary)
  username(varchar)
password, client_id

现在我的客户端表看起来像这样:

user_id, client_id(primary), is_new

这些之间的关系定义如下:

    class User extends AppModel
{
    public $name = 'User';
    public $hasOne = array(
        'Client' =>array(
            'className' => 'Client',
            'dependent' => true,
            'foreignKey' => 'client_id'
        )
    );
}


    class Client extends AppModel
{
    public $name = 'Client';
    public $primaryKey = 'client_id';
    public $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'dependent' => true,
            'foreignKey' => 'user_id'
        )
    );
}

现在在我的用户控制器中,我有以下保存操作:

      if ($this->request->is('post')) {
        $data = null;
        $client_id = null;
        if ($this->request->data['User']['group_id'] == 1) {
            $client_id = 2;

        } elseif ($this->request->data['User']['group_id'] == 2) {
            $client_id = $this->request->data['User']['Client id'];
        }
        $data = array('User' => array(
            'username' => $this->request->data['User']['username'],
            'password' => $this->request->data['User']['password'],
            'group_id' => $this->request->data['User']['group_id'],
            'client_id' => $client_id),
        'Client' => array('client_id' => $client_id)
        );

        if ($this->User->save($data)) {
            $this->Session->setFlash(__('The user has been saved'));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
        }
    }
    $groups = $this->User->Group->find('list');
    $this->set(compact('groups'));
}

当我保存新实体时,会使用正确的client_id添加到users表中,但是没有任何内容添加到客户端表中。

谁能告诉我为什么会这样?

请注意,我已尝试将功能更改为saveAll();

更新

如果我执行以下操作:

        $data = array( 'User' => array( 'username' => $this->request->data['User']['username'],
                'password' => $this->request->data['User']['password'],
                'group_id' => $this->request->data['User']['group_id'],
                'client_id' => $client_id ),
                'Client' => array('client_id' => $client_id) );
            if ($this->User->Client->saveAll($data)) {
}

Aka使用$this->User->Client->saveAll代替$this->User->saveAll()

一切正常......

现在这很好但是假设是这样的吗?

2 个答案:

答案 0 :(得分:1)

使用$this->User->saveAssociated($data)代替$this->User->save($data)

<强>更新

只需为没有字段 id 的客户端设置数据,如下所示,以便在保存用户时保存数据。

$data = array(
    'User' => array(
        'username' => $this->request->data['User']['username'], 
        'password' => $this->request->data['User']['password']
    ), 
    'Client' => array(
        'field1' => 'field1value',
        'field2' => 'field2value',
        'field3' => 'field3value'
    )
);

答案 1 :(得分:1)

是的,两者都是相同的,只是它们之间的区别在于,当您需要一次保存关联模型时使用saveAssoicated而saveAll是saveAssociated的包装,

您可以使用 saveAssociated

  

$这 - &GT;用户 - &GT; saveAssociated($数据)

以及 saveAll()

  

$这 - &GT;用户 - &GT;白水($数据)

由于