0

这是我的数据库架构:

create table Personas
(
    id int primary key AUTO_INCREMENT,
    Nombre varchar(255),
    Apellidos varchar(255),
    FechaDeNacimiento date,
    Sexo Bool,
    CarnetDeIdentidad varchar(255)
);

create table Tutors
(
    id int primary key AUTO_INCREMENT,
    persona_id int,
    FOREIGN KEY (persona_id) REFERENCES Personas(id)
);

create table Alumnos
(
    id int primary key AUTO_INCREMENT,
    persona_id int,
    FOREIGN KEY (persona_id) REFERENCES Personas(id)
);

create table CoordinadorDeProgramas
(
    id int primary key AUTO_INCREMENT,
    persona_id int,
    FOREIGN KEY (persona_id) REFERENCES Personas(id)
);

这是我的模型声明:

<?php
class Alumno extends AppModel {
    public $belongsTo = 'Persona';
}

<?php
class Coordinadordeprograma extends AppModel {
    public $belongsTo = 'Persona';
}

<?php
class Tutor extends AppModel {
    public $belongsTo = 'Persona';
}

<?php
class Persona extends AppModel {
    public $hasOne = array('Alumno', 'Tutor', 'Coordinadordeprograma');
}

在我的控制器中,我只想获取所有 Persona 记录,如果它们在 Alumnos 中有外键关系(例如)。

这是我的代码,我希望它说明了我正在尝试做的事情:

public function filter($type = null) {
    if ($type == "alumno") { // www.app.com/personas/filter/alumno
        $this->set('personas', $this->Alumno->Persona->find('all'));
    }
}

然而,这将返回每一个 Persona 记录,而不仅仅是那些在 Alumno 表中有记录的记录。

你建议我如何解决这个问题?我认为通过使用$this->Alumno->Persona我只会接触到 Alumno 表中的 Persona。

谢谢!

4

2 回答 2

1

您可以使用可包含的行为并在Alumno??

$this->set('personas', $this->Alumno->find('all'));

它应该检索“Alumno”以及与之关联的所有模型。您还可以选择要检索的模型。例如,此代码将检索所有“Alumno”及其对应的“Persona”

$this->set('personas', $this->Alumno->find('all',array('contain'=>array('Persona')));

当然..就像@Paulo回答的那样,您可以手动进行加入,但使用“containable”更干净。当我没有任何其他解决方案时,我只会手动加入。

希望这可以帮助,

于 2012-10-05T08:22:51.813 回答
1

您可以尝试 make INNER JOIN on the fly,如下所示:

$personas = $this->Alumno->Persona->find('all', array(
    'joins' => array(
        array(
            'table' => 'Alumnos',
            'alias' => 'Alumno',
            'type' => 'INNER',
            'conditions' => 'Persona.id = Alumno.persona_id'
        )
    )
));

$this->set('personas', $personas);
于 2012-10-04T15:57:15.897 回答