Ключ Cakephp, видимый в списке индексов, но не значение для связанной таблицы - PullRequest
0 голосов
/ 12 апреля 2011

Чтобы сделать его более понятным (изменено после первых двух комментариев ниже) ...

Совет контроллеров для индекса, проблема в том, что числовой 'region_id' отображается в представлении индекса вместо связанного 'региона-> name '.

    function index() {
    $this->Council->recursive = 0;
    $this->set('councils', $this->paginate());
}

Советы Модель:

    var $belongsTo = array(
    'Region' => array(
        'className' => 'Region',
        'foreignKey' => 'region_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

var $hasMany = array(
    'Person' => array(
        'className' => 'Person',
        'foreignKey' => 'council_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
);

SQL

--
-- Table structure for table `councils`
--

CREATE TABLE IF NOT EXISTS `councils` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
`email` varchar(40) NOT NULL,
`website` varchar(40) NOT NULL,
`websource` varchar(40) NOT NULL,
`region_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;

-- --------------------------------------------------------

--
-- Table structure for table `regions`
--

CREATE TABLE IF NOT EXISTS `regions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;

Ответы [ 2 ]

0 голосов
/ 12 апреля 2011

Обновите вашу индексную функцию:

function index() {
    $this->Council->recursive = 0;
    $this->set('councils', $this->paginate());
    $regions = $this->Council->Region->find('list');
    $this->set(compact('regions'));
}

Нет, все, что вам нужно сделать, это сослаться на массив регионов в представлении:

echo $regions[$councils['Council']['region_id']];

Это покажет Name вместо region_id.

Еще одна вещь: убедитесь, что у вас есть отношение $ hasMany, установленное и в модели региона.

0 голосов
/ 12 апреля 2011

Вы передаете список регионов в представление правильно, но вы должны убедиться, что ваши отношения между двумя моделями установлены правильно.В вашей модели Совета убедитесь, что у вас есть следующее:

var $belongsTo = array(
    'Region' => array(
        'className' => 'Region',
        'foreignKey' => 'region_id'
    )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...