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

无法在cakephp中使用containable从2个表中获取数据

越涵衍
2023-03-14

我无法从两个表中获得数据,每个表都有条件。文档中没有示例。我只需要来自students表的行,其中一个字段被标记为非活动,来自Guardian表的相应行email字段不为空。卫报有很多学生。我得到了结果,但是我得到了Guardian电子邮件的空值。我尝试了很多ID、型号名称等组合,但我就是不明白。

$guardianFound = $this->Student->find('all', array(
    'contain' => array( 'Guardian', array(
        'conditions' => array('guardian_email !=' => null),
        'fields' => array('id,guardian_email','guardian_first_name,guardian_last_name')
    )),
    'conditions' => array('student_inactive' => 1),
    'fields'=> array('student_inactive' ),
    'recursive'=> -1
)); 

结果:

(int) 0 => array(
    'Student' => array(
        'student_inactive' => true
    ),
    'Guardian' => array(
        'guardian_email' => '',
        'guardian_first_name' => 'Tulay',
        'guardian_last_name' => 'Karadavut',
        'id' => '100'
    )
)

http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

共有1个答案

斜宁
2023-03-14

看起来您的查询正在按预期工作,但您可能希望排除guardian\u email为null或空的位置。

要在CakePHP中为一个字段指定多个值,通常可以将其包装在另一个数组中,但对于您的情况,由于您要对NULL和空进行求反,这有点复杂,因为CakePHP处理db字段类型的方式不同。有关更多信息,请参阅此问题:复杂查找“或”不能正确处理null和空字符串。因此,为了简化它,您可以设置您的监护人条件,如下所示:

'conditions' => array(
    'guardian_email IS NOT NULL',
    'guardian_email != ""'
)

这里不需要递归键,因为您指定了要包含的内容。所以最后的发现电话是:

$guardianFound = $this->Student->find('all', array(
    'contain' => array(
        'Guardian' => array(
            'conditions' => array(
                'guardian_email IS NOT NULL',
                'guardian_email != ""'
            ),
            'fields' => array(
                'id', 'guardian_email', 'guardian_first_name', 'guardian_last_name'
            )
        )
    ),
    'conditions' => array('student_inactive' => 1),
    'fields' => array('student_inactive')
));

请注意,您找到了所有不活动的学生,然后只对与该学生相关的监护人执行监护人条件。如果没有与条件匹配的监护人记录,该字段仍将返回,但所有值均为NULL

我在这里假设,因为学生属于监护人,而且每个学生只有一个监护人,所以您实际上只希望返回提供监护人电子邮件的学生记录。如果是这样的话,你只需要把守护者条件移到主条件中。

$guardianFound = $this->Student->find('all', array(
    'contain' => array(
        'Guardian' => array(
            'fields' => array(
                'id', 'guardian_email', 'guardian_first_name', 'guardian_last_name'
            )
        )
    ),
    'conditions' => array(
        'student_inactive' => 1,
        'Guardian.guardian_email IS NOT NULL',
        'Guardian.guardian_email != ""'
    ),
    'fields' => array('student_inactive')
));
 类似资料:
  • 我正在学习cakephp,已经做了很多。我问这个问题的唯一原因是cakePHP中的文档可能是错误的。我不能从文档或过去的stackoverflow帖子中看到为什么(子)教师表不保存(父)用户表中id表中的user_id。我得到没有错误,但user_id是0在教师表,所以它不捡起它从用户表。我在两个模型上有一对一的关系。我只是测试保存超过2个模型,我有一个用户和老师。我只是在表单中输入数据,并创建一

  • 问题内容: 这是将单个表一分为二的结果: 要在只有一个表的情况下选择单个记录: 如何从两个表中获得所有记录,这些表的行由users.user_id = data.user_id连接? 问题答案: 使用显式语法可以为您提供帮助。将查询重写为: 并获取所有没有WHERE条件的行: 它将关注点分开:连接表的条件和限制结果集的条件。

  • 问题内容: 每个人,我都试图制作一个音乐应用程序,为此,我在自己的作品中创建了一个Horizo​​ntal ,而我的Horizo​​ntal 正在获取带有艺术家姓名的图像。 但是单击后,我加载了另一个活动。在我的其他活动,我试图在从火力加载SongsData 用。 但是问题是我没有从Firebase获取数据,而是返回了空数据。我在下面提供了我的代码,这是我的Firebase数据库的屏幕截图:-Sc

  • 问题内容: 我正在尝试一次从三个表中检索数据。这些表如下所示: 类别 讯息 评论 我想要得到的是1条消息(因为我有一个基于id的子句),3个类别(因为有3个类别链接到消息)和2条注释(因为有2条注释链接到消息)。 我正在尝试使用以下查询来检索数据: 但是,当运行此查询时,我得到6个结果: 在我预期结果如下的地方: 只有三行,我应该能够获取所有需要的数据。这有可能吗?我做错了吗?? 问题答案: 如评

  • Document.QuerySelector(“Button”).AddEventListener(“Click”,function(){console.log(“Click Détecté”);

  • 我试图用图表构建一个图表,数据来自我的Node.jsAPI。在图表文档中有一个异步数据的例子,如下所示: 但是我使用从API获取数据,我无法处理和。。。我试图用调用API的数据