Отношения Cake PHP - 3 Таблицы
у Меня есть следующие 3 таблицы:
Таблица Состояния:
id
nomeEstado
Таблица Городе:
id
idEstado //(que busca da tabela estado)
nomeCidade
Таблица Участников:
id
Nome
idCidade
Теперь я хочу разместить на странице Nome
, Cidade
Estado
, но я не получаю. Я могу только Nome
и Cidade
, Estado
не ищет.
Как сделать отношения между 3 таблицами?
1 answers
Создайте три Models в папке app/Model
в приложении CakePHP.
Примечание: Имя класса совпадает с именем файла, то есть class Estado
генерирует файл Estado.php
и так далее. Не забывает продлить (extends
) AppModel
. Все отношения последовали примеру сайте Framework CakePHP.
1) Параметры модели:
$userTable = имя таблица
$primaryKey = имя первичного ключа.
2) Отношения:
Были использованы Только $hasMany
1 для многих и $belongsTo
, что это много для 1, так и внутри массивов параметры:
className = имя класса, что делает корреспонденции.
foreignKey = имя внешнего ключа,
Существует конвенций, стандартов, но, в частности, я предпочитаю, чтобы разместить мои.
Классы 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'));
}
Испытания создаваемых с помощью классов добились успехов код и цифры чуть ниже:
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']);
}
В отношении его сомнения необходимо собрать один тип переменной array
параметры, как код ниже:
$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']);
}
В Этом ссылка есть и другие примеры.