Cake PHP - 如何仅检查最后一个条件

Posted

技术标签:

【中文标题】Cake PHP - 如何仅检查最后一个条件【英文标题】:Cake PHP - how to check the condition only for the last 【发布时间】:2017-01-25 18:27:15 【问题描述】:

我正在按照书签教程中的说明进行操作,但其中一个查询有问题。

我已经从我的数据库中烘焙了所有模型(如教程中的),现在我想准备自定义查找器。

我有两张表 Academic Teachers 和 Evaluations

CREATE TABLE evaluations (
  ID                        int(10) NOT NULL AUTO_INCREMENT, 
  academic_teacher_ID int(10) NOT NULL, 
  framework_ID           int(10) NOT NULL, 
  protocol_ID   int(10) NOT NULL, 
  final_note                     DOUBLE, 
  room                      varchar(255), 
  PRIMARY KEY (ID)) ;
CREATE TABLE academic_teachers (
  ID         int(10) NOT NULL AUTO_INCREMENT, 
  name       varchar(255) NOT NULL, 
  surname   varchar(255) NOT NULL, 
  national_identification_number      int(10) NOT NULL, 
  occupation varchar(4), 
  degree      varchar(255), 
  department  varchar(255), 
  PRIMARY KEY (ID)) ;

我想找到在上次评估中获得低分的老师。

public function findLowNotes(Query $query, array $options)

return $this->find()
->distinct(['AcademicTeachers.id'])
->matching('Evaluations', function ($q) 

    return $q->where(['Evaluations.final_note' < 3]);
);

但它会找到所有曾经有任何不良记录的老师。应该如何?我应该在某个地方使用一种检索我找到的最后一个 ID 的方法吗?还是有一种更聪明的方法肯定会奏效?我很困惑如何将它们结合在一起。

而且 - 是否可以与该 final_note 一起加入此处,以便我可以将其与该教师的数据一起分页?

此致, 米尔文

【问题讨论】:

现在没时间回答了,但是您非常想寻找带有额外条件的 ***.com/questions/30241975/…,无论您是作为额外关联还是直接实现它在查找器中(顺便说一句,它不应该返回新的查询,而是修改传递的查询)。 感谢您的建议,但我有一些问题,我在下面写了'bout it'。短片:我不仅有外键,而且还加入表格,将被评估的老师与评估他的人分开。我想这会破坏取景器,所以我写的那个无论如何都没用。或者也许我应该改变评估模型?不仅应该有belongToMany,还应该有hasOne。如果我手动添加它会起作用吗? 如果您认为进一步的关联可能会影响任务,请将它们添加到您的问题中。重要的是你总是展示完整的画面!另外我建议不要接受下面给出的答案,因为它没有解决实际的问题/问题(对我来说这听起来仍然像greatest-n-per-group 任务),而是一个语法错误,修复后不应该真正改变结果。 好的,我想最好的方法是简单地通过 GitHub 提供整个项目:[github.com/marcinmateuszwisniewski/hospit3 另外,使用的数据库的 DDL 脚本:[pastebin.com/EuagrRt9 是的,这个答案已被接受不必要 - 我怀疑,因为没有错误,当调用带有 finder 的函数时,没关系,然后我看到了那个答案,当我最终尝试通过烘焙模板添加记录时,发现它根本不起作用。跨度> 好的,我已经找到了让查找器工作的方法,我所要做的就是添加所有其他关联 - 蛋糕只为连接表烘焙,其余的都不存在。我没想到,我认为 Cake 会查看表并根据数据库中的约束设置所有关联。无论如何 - 让我们忘记每组最大 n 个问题。现在我想对我的查询进行分页,不仅显示个人数据,还显示这些老师收到的最后笔记。同时,我又开始了项目,所以到 GitHub 的旧链接没有更新文件。 【参考方案1】:

这是不对的。

return $q->where(['Evaluations.final_note' < 3]);

应该是的。

return $q->where(['Evaluations.final_note <' => 3]);

【讨论】:

好的,现在的问题是:public function findLowNotes(Query $query, array $options) return $this-&gt;find() -&gt;distinct(['AcademicTeachers.id']) -&gt;matching('Evaluations', function ($q) return $q-&gt;where(['Evaluations.final_note &lt;' =&gt; 3]); ); ...根本不返回任何内容,所以这已经是个坏主意了。现在我想,这可能是因为我有额外的连接表 AcademicTeachersEvaluation 用于负责评估的教师。有没有可能把原来的想法弄乱了?要不要把它移到别的地方?比如评价模型?

以上是关于Cake PHP - 如何仅检查最后一个条件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Cake PHP 3.5 中设置模型之间的关联?

带有条件检查的 PHP MySQL PDO TextArea Where 子句

如何将paypal自适应支付与cake php 1.3版本集成?

cakephp的 cake24CakeControllerBaseController.php

如何仅使用 (*.pdf) 之类的扩展名检查 php 中是不是存在文件

.net持续集成cake篇之使用vs或者vscode来辅助开发cake脚本