所以我不知道如何以cakey的方式做到這一點。如果它現在有比直接的PHP更長的東西,我已經黑了。我無法在文檔的任何位置找到它。因此,這裏是我的表是如何設置:hasMany vs HABTM - 自動填充複選框
instruments HABTM teachers
teachers HABTM instruments
instruments_teachers is my Join table
現在在instruments_teachers表我有一個額外的字段「類型」是指無論是老師原發性或繼發性的工具。
我再有另一個表:
instrument_levels belongsTo instruments_teachers
instruments_teachers hasMany instrument_levels
因此,在總結:
老師可以教很多儀器和儀器可以屬於(或學習)由許多不同的老師。然後,教師儀器的組合可以是教師的主要或輔助儀器,最後可以在三個不同級別(由instrument_levels定義)開始,中間或高級教授組合。
讓我知道如果你認爲有更好的方法來設計數據庫,但它似乎對我有意義。
嘗試將這些數據與蛋糕一起使用時,問題就出現了。我似乎無法弄清楚。在我的應用程序中,教師將首先在一系列複選框中選擇一種樂器,但數據必須在連接表中使用額外的字段類型進行提交。現在,這是我怎麼也出現在複選框:
控制器:
$instruments = $this->Teacher->Instrument->find('list', array('fields' => array('id', 'instrument')));
$this->set(compact('instruments'));
查看:
echo $this->Form->input('Instrument',array(
'label' => __('Instruments',true),
'type' => 'select',
'multiple' => 'checkbox',
'options' => $instruments,
'selected' => $this->Html->value('Instrument.Instrument'),
));
顯示所有複選框在一起,但我想更多的控制和顯示各分開(即,一個foreach循環)。這不,雖然工作:
$checked = $this->Form->value('Instrument.Instrument');
echo $this->Form->label(__('Instruments', true));
foreach ($instruments as $id => $label) {
echo $this->Form->checkbox("Instrument", array(
'checked' => (isset($checked[$id]) ? 'checked' : false),
'hiddenField' => false,
'value' => $id
));
echo $this->Form->label("Instrument", ucfirst($label));
}
,我怎麼會與HABTM協會提交額外的字段(「類型」字段)?最後,我需要有複選框,教師可以教授什麼水平。所以我首先需要獲取HABTM數據,然後在儀器旁邊有3個複選框。看起來很簡單,但是如何在添加這些複選框後填充它們?當我獲取數據時,它只會進入一個鍵控數組,並且與級別複選框無關。我把它放在一個foreach循環中,如下所示:InstrumentLevel.0.level,InstrumentLevel.1.level等等。但是當數據被提取時,它不會與複選框正確關聯。
我知道這很多,我一直在這個工作幾個星期,而我只是不知道我在做什麼。如果你能帶領我走向正確的方向,我將不勝感激!
謝謝!