cakephp 保存相关的属于

Posted

技术标签:

【中文标题】cakephp 保存相关的属于【英文标题】:cakephp save related belongsTo 【发布时间】:2012-10-20 06:35:58 【问题描述】:

我在 Employee 和 Schedule 之间有 hasMany 关系。 在编辑员工时,我设法获取了当前的日程安排并填充了我的表单。

保存后,我使用:

        if ($this->Employee->save($this->request->data)) 
            $this->Employee->Schedule->save($this->request->data, $validate = false);
            ....
        

员工数据保存完好,但日程记录保持不变。

我实际上将 id 作为数组的一部分提供。在我的控制器上, debug($this->request->data) 显示:

array(
'Employee' => array(
    'emp_position' => '1',
    'name' => 'the name',
    'emp_gender' => '1',
    'emp_father' => '',
    'emp_mother' => '',
    'emp_dob' => 'October 13, 1964',
    ...
    ..
),
'Schedule' => array(
    (int) 0 => array(
        'id' => '7',
        'ho_lu2' => '10:00',
        'ho_ma2' => '01:00',
        'ho_mi2' => '00:00',
        'ho_ju2' => '00:00',
        'ho_vi2' => '00:00',    
        'ho_do4' => '00:00'
    )
)
)           

.

***************** Update ************

我认为这与我的两个表上的外键不同

我的员工表:

CREATE TABLE IF NOT EXISTS `employees` (
  `id` int(5) DEFAULT NULL,
  `emp_appserial` int(5) unsigned NOT NULL AUTO_INCREMENT,
  ...

(请注意,在Employee表上,emp_appserial是我的pk autoincr,对于某些记录,employee_id可以为null)

我的日程表:

CREATE TABLE IF NOT EXISTS `schedules` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `employee_id` int(5) unsigned NOT NULL,
  ...

由于我使用不同的字段链接了这些表,因此我使用了 foreignKey:

在我的模型上,我链接了: 员工模型:

        var $hasMany = array(
            'Schedule' => array(
                'foreignKey' => 'employee_id',  //(field on Schedule)
                'dependent' => true
            )
        );

        public $primaryKey = 'emp_appserial'            

计划模型:

var $belongsTo = array('Employee',
    'Employee' => array(
        'foreignKey' => 'emp_appserial'    //(field on Employee)
    )
);

我发布的数据现在包括 schedule 的 employee_id 和 Employee 的 emp_appserial

array(
'Employee' => array(
    'id' => null,
    'emp_appserial' => '119'
    ...
),
'Schedule' => array(
    (int) 0 => array(
        'id' => '6',
        'name' => 'segundo horario',
        'emp_appserial' => '119',   
        'employee_id' => '119'
    )
)
)           

(尝试将 id 和序列都附加到 Schedule 以试试我的运气 - 不好。)

非常感谢任何帮助。

非常感谢!

【问题讨论】:

$this->request->data 的结构如何?你能打印那个数组吗?如果结构正确,您可以使用 saveAll。 @tykenn,非常感谢。有效!。实际上,我首先尝试实施答案-尚未看到您的评论-并更新了我的问题。然而,这奏效了。不过,我想知道我的 foreignKeys 问题是否对另存为 $this->Employee->Schedule->save($this->request->data... 有负面影响...再次感谢您。 【参考方案1】:

“作为一项规则,当使用 hasOne、hasMany 和 belongsTo 关联时,所有这些都与键控有关” - Cakephp 手册。

您的 Employee 数组必须传递一个 id,而 schedule 数组需要有一个 employee_id,这样 cake 就知道链接的模型是什么了。

【讨论】:

非常感谢。尝试发送密钥,但仍然没有运气。我认为这与我的两张桌子上的外键不同有关。你会p-p-请看更新的问题吗?添加了一些表格细节。 如果问题不大,我仍然很想知道我的 foreignKeys 问题是否对保存为 $this->Employee->Schedule->save($this->request-> 有负面影响数据...非常感谢。

以上是关于cakephp 保存相关的属于的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP saveAll() 函数问题

CakePHP- 保存相关模型数据

在 MVC 中保存相关数据(cakephp)

CakePHP:将数据保存到 3 个不同的模型

CakePHP 1.3 - 保存不相关模型的事务

CakePHP 3如何使用REST以正确的方式保存相关关联1:N?