HABTM - mehrere Checkboxen im View

Kategorie: CakePHP
Publikationsdatum: 28.04.2011

Es gibt zwei Tabellen, people und books. Diese stehen über HABTM (has and belongs to many), sprich die Tabelle books_people in Verbindung. Man möchte nun in der Bearbeitungsmaske von people alle Einträge von books anzeigen und mittels Checkboxen auswählen können.
 

Die Tabellen

Es werden die beiden Tabellen people und books normal angelegt. Beide Tabellen haben je einen primary key. Die dritte Tabelle, also die Verbindung zwischen people und books, besteht aus den foreign keys der beiden ersten Tabellen und einem primary key der aus den beiden foreign keys gebildet wird.
MySQL
  1. CREATE TABLE `people` (
  2. `id` int(11) NOT NULL auto_increment,
  3. `firstname` varchar(255) NOT NULL,
  4. `lastname` varchar(255) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. );
  7.  
  8. CREATE TABLE `books` (
  9. `id` int(11) NOT NULL auto_increment,
  10. `name` varchar(255) NOT NULL,
  11. PRIMARY KEY (`id`)
  12. );
  13.  
  14. CREATE TABLE `books_people` (
  15. `fk_people_id` int(11) NOT NULL,
  16. `fk_book_id` int(11) NOT NULL,
  17. PRIMARY KEY (`fk_people_id`,`fk_book_id`)
  18. );


Die Modelle

Im Modell der Tabelle people wird dann die Verbindung zwischen people und book erstellt. Dies geschieht über die Variable $hasAndBelongsToMany. Es wird der Tabellenname der Verbindungstablle und die foreign keys noch angegeben.
PHP
  1. class People extends AppModel
  2. { var $name = 'People';
  3. var $useTable = 'people';
  4.  
  5. var $hasAndBelongsToMany = array(
  6. 'Book' => array(
  7. 'className' => 'Book',
  8. 'joinTable' => 'books_people',
  9. 'foreignKey' => 'fk_people_id',
  10. 'associationForeignKey' => 'fk_book_id',
  11. 'dependent'=> false
  12. )
  13. );
  14. }
Im Modell von der Tabelle book gibt es dagegen nichts besonderes.
PHP
  1. class Book extends AppModel
  2. { var $name = 'Book';
  3. }

 

HABTM - Checkboxen ausgeben

Nun geht es noch um die Ausgabe der Checkboxen im View. Dies geschieht über den Typ select.
PHP
  1. //Form oeffnen
  2. echo $this->Form->create('People');
  3.  
  4. //ein normales Input-Feld
  5. echo $this->Form->input('id');
  6.  
  7. //die Checkboxen
  8. echo $this->Form->select('Book.Book', $books, null, array('multiple' => 'checkbox'));
  9.  
  10. //Form schliessen
  11. echo $this->Form->end();
Stichwörter: HABTM , multiple checkboxes
 
 
NACH OBEN