这是我的数据库架构:

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角色。

谢谢!

最佳答案

您可以使用containable behaviour并在Alumno上查找?

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


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

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


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

希望这可以帮助,

关于mysql - 如何使用CakePHP模型关联找到所有对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12730428/

10-11 10:26