1
我有两个表Clazzes
和Teachers
,都加入了第三个表clazzes_teachears
。我如何检索Clazzes
没有Teachers
关联?现在我只能返回所有Clazzes
元素,有或没有教师关联。只返回记录没有记录关联在另一个表
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没有相关的老师(我需要retrive只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`));
我不太了解cakephp 3.0来正确回答这个问题,但我认为'clazzes_teachers.clazz_id = clazzes.id'上有一个'left join clazzes_teachers,其中where条件'where clazzes_teachers.clazz_id为null'。我可以用cakephp 2.x'find('all',array(...))来写这个;'如果你认为那会有帮助。 – dragmosh