关于 CakePHP 可包含的问题,我已经环顾了很长时间,不知何故,我觉得 CakePHP 代码中有一个错误......让我给你下面的例子
假设与“指令”相关的模型“会计”。
public $belongsTo = array('Instruction');
我做这样的加入:
$options['contain'] = array(
'Instruction' => array(
'fields' => array('Instruction.id', 'Instruction.main_student_id', 'Instruction.teacher_id'),
'Student' => array(
'fields' => array('Student.id', 'Student.full_name', 'Student.invoice_payer_id'),
),
'Teacher' => array(
'fields' => array('Teacher.id', 'Teacher.full_name'),
'conditions' => array('Teacher.id' => $teacher_id)
),
)
);
return parent::find('all', $options);
所以有一个指令,学生和老师都属于这个指令。我从“会计”模型中调用 find
我的期望
- 连接是自动完成且正确的
- 检索包含中提到的字段
我得到了什么
- 字段已连接,但错误;所以结果数组包含一个有学生和教师的指令。但不是显示属于指令的正确教师,而是始终显示条件中指定的教师。
例子:
- 假设与教师“1 - John Appleseed”、“2 - Peter Googleseed”、“3 Larry Microseed”相关的表格指令
- 假设属于 3 位教师的多个指令
- 如果 $teacher_id = 3,则查询返回所有指令,而不是显示属于该指令的正确教师,而是始终显示 id = 3 的教师;更准确地说: [Instruction][teacher_id] 设置为正确的值,但 [Instruction][Teacher] 始终设置为条件的教师
但让我们更进一步:
- 如果设置了 $recursive = -1,那么我只会返回模型“会计”的字段;未检索到 Instruction、Student、Teacher 字段
让我们确定
- 我把“public $actsAs = array('Containable');” 在所有其他模型继承的 AppModel 中
- 是的,指令有一个“$belongsTo = array('Teacher', 'Student' => array(...))”
- 加入所需的字段都被选中
所以呢?
您能否尝试帮助我理解... - 为什么连接错误?- 为什么不检索所有字段?
我已经试过了
- 要显式设置连接:很奇怪,然后 [Instruction][teacher_id] 为空且 [Instruction][Teacher] 未设置!
- 省略要检索的字段的显式选择