0

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',
    )
);

事件控制器片段:

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>
4

1 回答 1

1

你可以帮我试试吗?将 $prigroups 变量重命名为“groups”并将其传递给视图。看看这是否有效。否则,将其与旧代码一起使用:

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

我还建议您对所有这些 PriGroups 和 SecGroups 使用驼峰式大小写。这是英语中的两个词,因此建议使用驼峰式。

问候 func0der

于 2012-11-16T21:24:40.233 回答