只检索没有与另一个表关联的记录的记录

里卡多

我有两个表,Clazzes并且Teachers都由第三个表连接clazzes_teachears我如何检索Clazzes没有Teachers关联的?现在,我只能返回Clazzes带有或不带有Teacher的所有元素。

ClazzesTable.php初始化

public function initialize(array $config)
{
    parent::initialize($config);

    $this->table('clazzes');
    $this->displayField('name');
    $this->primaryKey('id');

    $this->belongsToMany('Teachers', [
        'foreignKey' => 'clazz_id',
        'targetForeignKey' => 'teacher_id',
        'joinTable' => 'clazzes_teachers'
    ]);
}

TeachersTable.php初始化

public function initialize(array $config)
{
    parent::initialize($config);

    $this->table('teachers');
    $this->displayField('id');
    $this->primaryKey('id');

    $this->belongsToMany('Clazzes', [
        'foreignKey' => 'teacher_id',
        'targetForeignKey' => 'clazze_id',
        'joinTable' => 'clazzes_teachers'
    ]);
}

注意:不存在ClazzesTeachersTable.php

返回有/没有老师的所有Clazzes的方法(我只需要在Clazzes没有的情况下进行检索Teachers

public function getAllClazzesRecursive(){
    return $this
        ->find('all')
        ->contain([
            'Teachers' => function($q) {
                return $q->select(['id', 'registry', 'url_lattes', 'entry_date', 'formation', 'workload', 'about', 'rg', 'cpf', 'birth_date', 'situation']);
            }
        ])->hydrate(false)->toArray();
}

老师的SQL:

 CREATE TABLE IF NOT EXISTS `teachers` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `registry` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`));

Clazzes SQL:

 CREATE TABLE IF NOT EXISTS `clazzes` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`));

clazzes_teachers sql:

CREATE TABLE IF NOT EXISTS `clazzes_teachers` (
  `clazz_id` INT NOT NULL,
  `teacher_id` INT NOT NULL,
  PRIMARY KEY (`clazz_id`, `teacher_id`));
N号

使用join查询构建器,请参阅更多http://book.cakephp.org/3.0/en/orm/query-builder.html#adding-joins

 public function getAllClazzesRecursive(){
    return $this
        ->find('all')
        ->join([
          'table' => 'clazzes_teachers',
          'alias' => 'ct',
          'type' => 'LEFT',
          'conditions' => 'ct.clazz_id= clazzes.id',
         ])
       ->where('ct.id IS NULL')
       ->hydrate(false)->toArray();
}

您也可以leftJoin()直接使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从一个表中查找在另一个表的关联记录中没有特定字段值的记录的记录

来自分类Dev

从另一个表中获取没有记录的记录

来自分类Dev

对于没有与另一个表的连接记录的记录,如何获得连接结果?

来自分类Dev

计算与另一个记录关联的记录数量

来自分类Dev

选择仅与另一个表中的记录关联的记录

来自分类Dev

从一个表中选择记录,而另一个表中没有两列

来自分类Dev

如果另一个表中没有记录,则插入到一个表中

来自分类Dev

如何从一个表中选择另一个表中没有外键的记录

来自分类Dev

如果另一个表中没有记录,则插入到一个表中

来自分类Dev

同一个表的所有记录由一个字段关联但由另一个字段查询 - sqlserver

来自分类Dev

需要从一个表中获取记录,而另一个表中没有该记录

来自分类Dev

根据一个键消除所有重复项,并保留一个表中没有在另一个表中的记录

来自分类Dev

在另一个表中检索具有2个以上关联的行

来自分类Dev

SQL-不存在时不从另一个表中检索记录

来自分类Dev

从一个表中选择所有记录并从另一个表中匹配记录

来自分类Dev

根据另一个表的“相似”值从一个表中检索记录

来自分类Dev

连接两个表,向我显示一个表中的记录,而另一个表中没有对应的值

来自分类Dev

从另一个表更新表中的记录

来自分类Dev

SQL查询来从一个表返回记录被从另一个表关联到各2条记录

来自分类Dev

根据某些条件从一个与另一个表相关的表中检索记录

来自分类Dev

如何将一个记录与同一表中的另一个记录相关联?

来自分类Dev

SQLite:从另一个表中指定的表中删除所有记录

来自分类Dev

使用数据透视表从另一个表获取所有记录

来自分类Dev

更新具有另一个表ID的表中的记录

来自分类Dev

SQLite:从另一个表中指定的表中删除所有记录

来自分类Dev

使用JPA从另一个表获取记录

来自分类Dev

从另一个表获取每个记录的总数

来自分类Dev

使用JPA从另一个表获取记录

来自分类Dev

根据最新记录更新另一个表

Related 相关文章

  1. 1

    从一个表中查找在另一个表的关联记录中没有特定字段值的记录的记录

  2. 2

    从另一个表中获取没有记录的记录

  3. 3

    对于没有与另一个表的连接记录的记录,如何获得连接结果?

  4. 4

    计算与另一个记录关联的记录数量

  5. 5

    选择仅与另一个表中的记录关联的记录

  6. 6

    从一个表中选择记录,而另一个表中没有两列

  7. 7

    如果另一个表中没有记录,则插入到一个表中

  8. 8

    如何从一个表中选择另一个表中没有外键的记录

  9. 9

    如果另一个表中没有记录,则插入到一个表中

  10. 10

    同一个表的所有记录由一个字段关联但由另一个字段查询 - sqlserver

  11. 11

    需要从一个表中获取记录,而另一个表中没有该记录

  12. 12

    根据一个键消除所有重复项,并保留一个表中没有在另一个表中的记录

  13. 13

    在另一个表中检索具有2个以上关联的行

  14. 14

    SQL-不存在时不从另一个表中检索记录

  15. 15

    从一个表中选择所有记录并从另一个表中匹配记录

  16. 16

    根据另一个表的“相似”值从一个表中检索记录

  17. 17

    连接两个表,向我显示一个表中的记录,而另一个表中没有对应的值

  18. 18

    从另一个表更新表中的记录

  19. 19

    SQL查询来从一个表返回记录被从另一个表关联到各2条记录

  20. 20

    根据某些条件从一个与另一个表相关的表中检索记录

  21. 21

    如何将一个记录与同一表中的另一个记录相关联?

  22. 22

    SQLite:从另一个表中指定的表中删除所有记录

  23. 23

    使用数据透视表从另一个表获取所有记录

  24. 24

    更新具有另一个表ID的表中的记录

  25. 25

    SQLite:从另一个表中指定的表中删除所有记录

  26. 26

    使用JPA从另一个表获取记录

  27. 27

    从另一个表获取每个记录的总数

  28. 28

    使用JPA从另一个表获取记录

  29. 29

    根据最新记录更新另一个表

热门标签

归档