【问题标题】:cakephp array results [maximum depth reached]cakephp 数组结果 [达到最大深度]
【发布时间】:2014-11-21 20:41:53
【问题描述】:

我有两个模型。 TeacherSubject 加入 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


【解决方案1】:

您的数据存在,调试器不会显示它,因为depth 选项限制了它。使用debug()(默认深度=25)或Debugger::dump()/exportVar(),其深度(第二个参数,默认为3)对于您的深层嵌套数据来说足够高。

另见

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 2017-10-11
      相关资源
      最近更新 更多