如何在cakePHP中保存这些数据?

时间:2014-02-01 07:51:27

标签: php cakephp model save model-associations

我有一个User模型和一个Boarder模型,并非每个用户都是一个寄宿生,但每个寄宿生都是用户。

用户模型

class User extends AppModel
{
    public $primaryKey = "user_id";
    public $hasMany = 'Boarder';
}

寄宿生模型

class Boarder extends AppModel
{
    public $belongsTo = 'User';
}

我的寄宿生视图的add.ctp

<?php 
echo $this->Form->create('Boarder', array('role' => 'form', 'novalidate' => true)); 
echo $this->Form->input('user_name');
echo $this->Form->input('bdr_home_address');
echo $this->Form->end();
?>

因此,在提交期间,在控制器中添加函数现在将收到类似这样的数组

Array
(
    [Boarder] => Array
        (
            [user_name] => 'John',
            [bdr_home_address] => 'Some Street, Some City'
        )
)

[user_name]将保存在用户模型中,而[bdr_home_address]将保存在Boarders模型中。如我的$this->Form->create中所示,请求将被定向到BoardersController,动作添加。 那我怎么能保存呢?

BoardersController

class BoardersController extends AppController
{
    public function add()
    {

    }
}

1 个答案:

答案 0 :(得分:1)

如果每个Boarder都是User,则Boarder表应包含user_id字段。

add.ctp表单可能看起来像

<?php
echo $this->Form->create('Boarder', array('role' => 'form', 'novalidate' => true));
echo $this->Form->input('User.username');
echo $this->Form->input('Boarder.home_address');
echo $this->Form->submit();
echo $this->Form->end();
?>

控制器的add功能是:

public function add()
{
    if ($this->request->is('post')) {
        debug($this->request->data);
        if ($this->Boarder->saveAssociated($this->request->data)) {
            // saved
        } else {
            // not saved
        }
    }

}