Отношения Cake PHP - 3 Таблицы


у Меня есть следующие 3 таблицы:

Таблица Состояния:

id
nomeEstado

Таблица Городе:

id
idEstado //(que busca da tabela estado)
nomeCidade

Таблица Участников:

id
Nome
idCidade

Теперь я хочу разместить на странице Nome, Cidade Estado, но я не получаю. Я могу только Nome и Cidade, Estado не ищет.

Как сделать отношения между 3 таблицами?

Author: Tmc, 2014-08-31

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']);
}

inserir a descrição da imagem aqui


В отношении его сомнения необходимо собрать один тип переменной 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']);
}

inserir a descrição da imagem aqui

В Этом ссылка есть и другие примеры.

 4
Author: Maria, 2014-09-01 00:42:31