当前位置: 首页 > 知识库问答 >
问题:

CakePHP包含显示错误的数据

谭伟
2023-03-14

关于CakePHP containable,我已经四处寻找了很长一段时间,不知怎的,我觉得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. 连接将自动完成并更正
  2. 将检索包含中提到的字段
  1. 字段被连接,但连接错误;因此,结果数组包含一条带学生和教师的指令。但它不会显示属于某个指令的正确教师,而是始终显示条件中指定的教师

示例:

  • 假设表格中的说明与教师“1-约翰·阿普利塞德”、“2-彼得·谷歌种子”、“3-拉里·麦斯韦德”相关
  • 假设多个指令属于3位教师
  • 如果$teacher_id=3,查询将返回所有指令,而不是显示属于该指令的正确教师,而是始终显示id=3的教师;更准确地说,[Instruction][teacher\u id]设置为正确的值,但[Instruction][teacher]始终设置为条件的教师

但让我们更进一步:

  1. 如果$递归=-1设置,那么我只返回模型会计的字段;指令,学生,教师的字段不被检索
  • 我将“public$actsAs=array('Containable');”放在所有其他模型从中继承的AppModel中
  • 是,指令有一个“$belongsTo=数组('Teacher'、'Student'=

你能帮我理解一下吗为什么连接错误?-为什么不检索所有字段?

  • 要显式设置连接:很奇怪,那么[指令][teacher_id]是空的,[指令][老师]没有设置!
  • 要省略要检索的字段的显式选择

共有1个答案

聂溪叠
2023-03-14
Containable also goes a step deeper: you can filter the data of the associated models.

http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html#containing-更深层次的联想

您在containable上给出的条件用作筛选器,而不是联接的限制。因此,它不会返回某个教师的指令,而是返回所有指令及其关联的教师,并使用条件数组('Teacher.id')过滤教师=

尝试在教学中而不是教师中添加条件。类似的东西:

'Instruction' => array(
    'Student','Teacher',
    'conditions' => array('Instruction.teacher_id' => $teacher_id)

这将返回所有的会计,它将只过滤某个老师的指示。

您可以随时手动执行连接(它可能看起来不太好,但可以正常工作),只要记住在执行此操作时将containable设置为false即可。

希望这有帮助

 类似资料:
  • 问题内容: 我有两个表,用于存储该员工的所有个人记录,并存储每个月支付给特定员工的电话费。现在我有一个名为的函数,类似于以下内容: 此功能基本上可以找到在给定期间内支付账单的所有员工。但是我遇到一个错误 型号:: 注意:如果我跳过和条件,我将得到array的结果! 问题答案: 详细信息/注释: 1)看起来您正在使用。不要那样做改用Containable 2)您不能根据条件限制父模型包含的数据/包含

  • 我有一个称为“Profile”的对象列表,每个Profile都有一个功能列表(一个Profile可以做的事情)和一个与该Profile关联的用户列表。 我想在一个JTable中显示这些信息。首先,用le功能显示配置文件,然后显示该配置文件中的用户。类似这样的事情: 因此,首先,我实现了一个更聪明的getRowCount()方法,然后是一个getValueAt方法,该方法在JTable中打印一个配置

  • 问题内容: 为什么此代码不起作用? 我总是会出错。我已经启用,并且在php.ini中也是128M。如果我删除,我不会收到错误,但也不会看到图像。我所看到的是这个:- £ ,` 问题答案: 您不得在之前输出任何内容 。只需以(作为第一个文件字符)开头,然后是用于显示图像的代码即可。跳过HTML标签。 甚至不要在 header() 之前写一个空白行 。 如果要在您的html文档中显示图像,则必须在两个

  • 问题内容: 我将项目更新为最新的Android API,该项目现在具有多个不赞成使用的方法。Android Studio是否有一种很酷的方法来列出所有包含上述方法的类,例如TODO窗口?我知道我可以遍历每个类并有条不紊地搜索代码,但是我想让自己轻松一些。任何帮助,提示和/或提示都将不胜感激。 问题答案: 如果它可以帮助其他人,请回答我的问题: 如果您去 分析 -> 检查代码… 检查完项目后,单击“

  • 我已经在Android studio上安装了颤振,每当我在Android studio上导入新项目时,它会显示“Dart未配置下载Dart SDK或打开Dart设置” 到目前为止,代码还不错。 当我打开省道设置时 Idk在每个项目中尝试了什么,只有在新的颤振项目运行良好时才尝试。颤振版本是2.8.1 Dart版本是2.15.1 Android Studio Arctic Fox | 2020.3.