Create three Models in the app/Model
folder in your CakePHP application.
Note: Class name is the same name as the file, that is, class Estado
generates a Estado.php
file, and so on. Do not forget to extend ( extends
) of AppModel
. All relationships followed the CakePHP Framework website .
1) Model Settings:
2) Relationships:
Only $hasMany
is used which is 1 for many and $belongsTo
which is many for 1, and within the arrays the configurations:
There are standard conventions, but I particularly prefer to put mine.
Classes Model:
<?php
//Tabela "Estado" id nomeEstado
class Estado extends AppModel {
public $name = 'estado';
public $useTable = 'estado';
public $primaryKey = 'id';
public $hasMany = array('Cidade' => array('className' => 'Cidade','foreignKey' => 'idEstado'));
}
<?php
//Tabela "Cidade" id idEstado (que busca da tabela estado) nomeCidade
class Cidade extends AppModel {
public $name = 'cidade';
public $useTable = 'cidade';
public $primaryKey = 'id';
public $belongsTo = array('Estado' => array('className' => 'Estado', 'foreignKey' => 'idEstado'));
public $hasMany = array('Participante' => array('className' => 'Participante','foreignKey' => 'idCidade'));
}
<?php
//Tabela "Participante" id Nome id_Cidade
class Participante extends AppModel {
public $name = 'participante';
public $useTable = 'participante';
public $primaryKey = 'id';
public $belongsTo = array('Cidade' => array('className' => 'Cidade', 'foreignKey' => 'idCidade'));
}
Test generated with the classes were successful with the code and figures just below:
foreach($this->Estado->find('all') as $row){
printf('<p>%s %s</p>', $row['Estado']['id'],$row['Estado']['nomeEstado']);
}
foreach($this->Cidade->find('all') as $row){
printf('<p>%s %s %s %s</p>', $row['Cidade']['id'],
$row['Cidade']['nomeCidade'],
$row['Estado']['id'],
$row['Estado']['nomeEstado']);
}
//var_dump($this->Participante->find('all'));
foreach($this->Participante->find('all') as $row){
printf('<p>%s %s %s %s</p>',
$row['Participante']['id'],
$row['Participante']['nome'],
$row['Cidade']['id'],
$row['Cidade']['nomeCidade']);
}
Regardingyourquestion,youshouldsetupavariableoftypearray
withtheoptionsascodebelow:
$options=array('joins'=>array(array('table'=>'estado','alias'=>'Estado','type'=>'INNER','conditions'=>array('Estado.id=Cidade.idEstado'))),'fields'=>array('Participante.*','Cidade.*','Estado.*'));foreach($this->Participante->find('all',$options)as$row){printf('<p>%s%s%s%s%s</p>',$row['Participante']['id'],$row['Participante']['nome'],$row['Cidade']['id'],$row['Cidade']['nomeCidade'],$row['Estado']['nomeEstado']);}
In this link there are more examples.