协会仅适用于$ scaffold

时间:2012-11-16 20:49:36

标签: cakephp

Cake的新手,并试图建立模型关联。我正在创建一个执行计划程序,供多个团队使用,也就是“团队”,其中计划的基本单位是“事件”。每个活动都由一个团队拥有,但它可以拥有许多支持团队。

当我在控制器中使用$ scaffold时,模型关联按预期工作,当添加新事件时,我会得到一个包含所有组的选择框,以选择谁拥有一个事件。但是,当我使用控制台烘焙控制器时,group_id的选择框为空白。我已经从控制器和烘焙的添加视图中包含了烘焙的add()代码。我还在debug($this)中尝试了add.ctp,发现组的列表确实已传递给视图。因此,我很担心为什么它适用于$ scaffold,但不是其他。

非常感谢任何正确方向的建议或指示。

表格

CREATE TABLE IF NOT EXISTS `events` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `group_id` int(5) NOT NULL COMMENT 'Group that owns event',
  `version` int(5) NOT NULL,
  `type` varchar(5) NOT NULL,
  `stime` time NOT NULL,
  `etime` time NOT NULL,
  `description` text NOT NULL,
  `comment` text NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `events_groups` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `event_id` int(5) NOT NULL,
  `group_id` int(5) NOT NULL,
  PRIMARY KEY (`id`)
) ;

CREATE TABLE IF NOT EXISTS `groups` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `code` varchar(4) NOT NULL,
  `name` varchar(25) NOT NULL,
  `liveversion` int(4) NOT NULL,
  `lastupdated` date NOT NULL,
  PRIMARY KEY (`id`)
);

型号:

事件:

public $belongsTo = array(
    'Prigroup' => array(
        'className' => 'Group',
        'foreignKey' => 'group_id',
        )
    );


public $hasAndBelongsToMany = array(
    'Secgroup' => array(
        'className' => 'Group',
        'joinTable' => 'events_groups',
        'foreignKey' => 'event_id',
        'associationForeignKey' => 'group_id',
    )
);

组:

public $hasMany = array(
    'Prievent' => array(
        'className' => 'Event',
        'foreignKey' => 'group_id',
        )
    );

public $hasAndBelongsToMany = array(
    'Secevent' => array(
        'className' => 'Event',
        'joinTable' => 'events_groups',
        'foreignKey' => 'group_id',
        'associationForeignKey' => 'event_id',
    )
);

EventsController代码段

public function add() {
    if ($this->request->is('post')) {
        $this->Event->create();
        if ($this->Event->save($this->request->data)) {
            $this->Session->setFlash(__('The event has been saved'));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The event could not be saved. Please, try again.'));
        }
    }
    $prigroups = $this->Event->Prigroup->find('list');
    $secgroups = $this->Event->Secgroup->find('list');
    $this->set(compact('prigroups', 'secgroups'));
}

添加视图

<?php echo $this->Form->create('Event'); ?>
    <fieldset>
        <legend><?php echo __('Add Event'); ?></legend>
    <?php
        echo $this->Form->input('group_id');
        echo $this->Form->input('version');
        echo $this->Form->input('type');
        echo $this->Form->input('stime');
        echo $this->Form->input('etime');
        echo $this->Form->input('description');
        echo $this->Form->input('comment');
        echo $this->Form->input('Secgroup');
    ?>
    </fieldset>
<?php echo $this->Form->end(__('Submit')); ?>

添加HTML输出

<div class="input select"><label for="EventGroupId">Group</label><select name="data[Event][group_id]" id="EventGroupId">
</select></div>

1 个答案:

答案 0 :(得分:1)

你能为我试一下吗?将$ prigroups变量重命名为“groups”并将其传递给视图。看看这是否有效。否则,请使用旧密码:

echo $this->Form->input(
    'group_id',
    array(
        'options' => $prigroups
    )
);

我还建议您为所有PriGroups和SecGroups使用驼峰案例。这是两个英文单词,所以骆驼案是可取的。

问候 func0der