【发布时间】:2014-11-21 20:41:53
【问题描述】:
我有两个模型。 Teacher 和 Subject 加入 HABTM 定义了这两种方式。一个老师可以教很多科目,一个科目可以由很多老师教。我的join表是subjects_teachers,并且有字段id、teacher_id和subject_id。
从其模型中获取教师数据,我希望所有教师及其各自的科目, 从它的模型中获取主题数据,我希望还能看到教师教授该特定主题
问题 在这两种情况下,关联模型都返回正确数量的记录,但数据不存在。当我显示相应的数组时,我会看到 [达到最大深度]。
我从连接表中删除了id字段,并且只修复了Teacher模型。Subject模型仍然存在问题。
我只需要知道 [达到最大深度] 是什么意思,以及为什么从连接表中删除 id 文件可以解决教师问题而不是主题问题。
如果它很重要,我应该提到我的教师模型主键字段不遵循约定 主题模型
public $hasAndBelongsToMany = array(
'Teacher' => array(
'className' => 'Teacher',
'joinTable' => 'subjects_teachers',
'foreignKey' => 'subject_id',
'associationForeignKey' => 'teacher_id',
'unique' => 'keepExisting'
)
);
教师模式
public $hasAndBelongsToMany = array(
'Subject' => array(
'className' => 'Subject',
'joinTable' => 'subjects_teachers',
'foreignKey' => 'teacher_id',
'associationForeignKey' => 'subject_id',
'unique' => 'keepExisting'
)
);
主题结果
array(
(int) 0 => array(
'Subject' => array(
'id' => '1',
'subject_code' => '121',
'subject_name' => 'Mathematics',
'compulsory' => true
),
'Teacher' => array(
(int) 0 => array(
[maximum depth reached]
),
(int) 1 => array(
[maximum depth reached]
),
(int) 2 => array(
[maximum depth reached]
)
)
),
移除 id 字段前教师的结果
array(
'Teacher' => array(
'teacher_id' => '6',
'first_name' => 'George',
),
'Subject' => array(
(int) 0 => array(
'id' => '1',
'subject_code' => '121',
'subject_name' => 'Mathematics',
'compulsory' => true,
'SubjectsTeacher' => array(
[maximum depth reached]
)
)
移除 id 字段后的结果
'Subject' => array(
(int) 0 => array(
'id' => '1',
'subject_code' => '121',
'subject_name' => 'Mathematics',
'compulsory' => true
),
【问题讨论】:
-
你能准确地发布你的模型定义吗?从你的最后一行(“如果它很重要,我应该提到我的教师模型主键字段不遵循约定”)我可以推断出问题与由于不遵循约定而无法正常工作的 CakePHP 自动关系有关。有一些方法可以避免自己指定哪些列用作外键。但这只是一个扣除。需要请求的代码来确认它
-
我明白你的意思..那么达到的最大深度是什么意思,因为显然 cakephp 识别了所有相关记录,但无法显示它们
标签: cakephp