【发布时间】:2012-08-15 04:03:54
【问题描述】:
我将从表的结构开始。我有一个使用 hasOne 关系与 Tutors 表链接的 Contacts 表。 Tutors 表使用 HABTM 关系与 Disciplines 表链接,其中 Disciplines_Tutors 作为连接表。现在,我将 Contacts 和 Tutors 属性都放在一个统一的联系表单中。 Disciplines 表属性也是如此。发生的情况是我能够将联系人和导师保存到各自的表中,但我无法保存到 Disciplines_Tutors 连接表中。
下面是表格结构,便于理解:
如果从 Tutors 添加表单保存,则不会出现此问题。它完美保存。
联系人表有:id,自己的属性
Tutors 表有:id,自己的属性,contact_id
学科表有:id、学科
Disciplines_Tutors 表有:id、discipline_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 还很陌生。
谢谢!
【问题讨论】:
-
你写了什么代码来保存相关记录?
-
@ArunJain 我已经使用 saveAll 来保存记录。
public function add() { if(!empty($this->data)){ if ($this->Contact->saveAll($this->data)){ $this->Session->setFlash(__('The contact has been saved')); $this->redirect(array('action' => 'index')); } else{ $this->Session->setFlash(__('The contact could not be saved. Please try again.')); } }
标签: cakephp has-and-belongs-to-many save has-one