これが私のデータベーススキーマです:
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');
}
私のコントローラーでは、(たとえば)Alumnosで外部キー関係がある場合、すべてのPersonaレコードをフェッチしたいだけです。
これが私のコードです。私がやろうとしていることを示しているといいのですが。
public function filter($type = null) {
if ($type == "alumno") { // www.app.com/personas/filter/alumno
$this->set('personas', $this->Alumno->Persona->find('all'));
}
}
ただし、これは、Alumnoテーブルにレコードがあるレコードだけでなく、すべてのPersonaレコードを返します。
この問題を解決するためにどのように提案しますか?使う$this->Alumno->Persona
ことで、アルムノのテーブルにいるペルソナにしか届かないと思いました。
ありがとう!