1

我将从我的表格的结构开始。我有一个使用 hasOne 关系与 Tutors 表链接的 Contacts 表。Tutors 表使用 HABTM 关系与 Disciplines 表链接,其中 Disciplines_Tutors 作为连接表。现在,我将 Contacts 和 Tutors 属性都放在一个统一的联系表单中。Disciplines 表属性也是如此。发生的情况是我能够将联系人和导师保存到各自的表中,但我无法保存到 Disciplines_Tutors 连接表中。

下面是表格结构,便于理解:

表结构

如果从 Tutors 添加表单保存,则不会出现此问题。它完美保存。

Contacts 表有:id,自己的属性
Tutors 表有:id,自己的属性,contact_id
学科表有:id,学科
Disciplines_Tutors 表有:id,学科id,tutor_id

在统一的联系表中,我可以查看可用的学科并进行选择。但是保存时,它不会保存到连接表中。

导师型号:

public $hasAndBelongsToMany = array(
    'Discipline' => array(
        'className' => 'Discipline',
        'joinTable' => 'disciplines_tutors',
        'foreignKey' => 'tutor_id',
        'associationForeignKey' => 'discipline_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )
);

学科模型:

public $hasAndBelongsToMany = array(
    'Tutor' => array(
        'className' => 'Tutor',
        'joinTable' => 'disciplines_tutors',
        'foreignKey' => 'discipline_id',
        'associationForeignKey' => 'tutor_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )
);

学科导师模型:

public $belongsTo = array(
    'Tutor' => array(
        'className' => 'Tutor',
        'foreignKey' => 'tutor_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Discipline' => array(
        'className' => 'Discipline',
        'foreignKey' => 'discipline_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

ContactsController 有:

    $disciplines = $this->Contact->Tutor->Discipline->find('list');

在公共功能添加部分。因此,使选择列表的检索成为可能。

Tutors、Disciplines、DisciplinesTutors 控制器都在使用 saveAll 方法。

在统一联系人表单的添加表单中。它有:

echo $this->Form->input('Tutor.Discipline',array('type'=>'select','multiple'=>true));

这允许我检索可供选择的学科列表。

我不确定还需要什么其他信息。随意提问,我会将它们添加到这个问题中。

另外,请对我放轻松,因为我对 CakePHP 还很陌生。

谢谢!

4

1 回答 1

2

您应该使用'deep' => true带有 saveAll() 方法的选项来保存多个关联记录。您可以尝试以下代码来保存多个关联数据:

 $this->Contact->saveAll($this->data, array('deep' => true));

您也可以使用saveAssociated()方法进行尝试。

只有当您收到与通过find()方法选择任何联系人时获得结果相同的数组时,它才会起作用。

于 2012-08-20T04:21:00.407 回答