Empfehlungen: Erweiterte Suche

Verwirrt was ich nehmen soll

Datenbankobjekte strukturieren und validieren

Re: Verwirrt was ich nehmen soll

Beitragvon klagoggle » Mo 26. Mai 2008, 18:34

Puh, das ne gute frage..
Das mit der HABTM hab ich auch noch nicht so ganz gecheckt.
Glaub muss mir das mal in aller ruhe nicht in "ich guggs mal schnell durch" durchlesen.
klagoggle
 
Beiträge: 10
Registriert: Mi 4. Jun 2008, 22:30

Re: Verwirrt was ich nehmen soll

Beitragvon klagoggle » Mo 26. Mai 2008, 18:35

Ok, viele dank an Alex.

Mit HABTM klappts wunderbar.
Dann bietet er mir sogar noch eine liste mit an und ich muss nicht noch extra ein "Lineup" erstellen.

Vielen dank!

Und ich muss nochmal sagen, wie wunderbar die Konsole funktioniert!
einfach eine Tabelle mit artists_events (danke Alex :) ) erstellt, und dann das Model Artists gebaked, und schon hat er mir die HABTM vorgeschlagen.

Hm jam jam, der Kuchen ist echt lecker :)
klagoggle
 
Beiträge: 10
Registriert: Mi 4. Jun 2008, 22:30

Re: Verwirrt was ich nehmen soll

Beitragvon Alex » Mo 26. Mai 2008, 18:35

Na das ist doch mal ne gute Nachricht. Kannst ja vielleicht noc den Code vom Model posten. Oder zumindest die ersten Zeilen. Ich denke mal das nicht alle die Konsole benutzen.
Alex
 
Beiträge: 120
Registriert: Di 13. Mai 2008, 13:39
Wohnort: Bremen
CakePHP-Version: 1.x.x
OS: OSX / Win 7 / Debian

Re: Verwirrt was ich nehmen soll

Beitragvon Bladeflo » Mo 26. Mai 2008, 18:35

benutzen schon aber nicht alles damit machen ;-) geht ja leider auch nicht :(
Bladeflo
 

Re: Verwirrt was ich nehmen soll

Beitragvon klagoggle » Mo 26. Mai 2008, 18:38

Ja klaro:

artist.php:
Code: Alles auswählen
      <?php
       class Artist extends AppModel {</p>
      <p> var $name = 'Artist';
      var $useTable = 'artists';
      var $validate = array(
     'name' => VALID_NOT_EMPTY
      );</p>
      <p> //The Associations below have been created with all possible keys, those that are not needed can be removed
      var $hasAndBelongsToMany = array(
      'Event' => array('className' => 'Event',
      'joinTable' => 'artists_events',
      'foreignKey' => 'artist_id',
      'associationForeignKey' => 'event_id',
      'unique' => true,
       'conditions' => '',
      'fields' => '',
      'order' => '',
      'limit' => '',
      'offset' => '',
      'finderQuery' => '',
      'deleteQuery' => '',
      'insertQuery' => ''
      )
      );</p>
      <p>}
      ?>


event.php

Code: Alles auswählen
<?php
       class Event extends AppModel {</p>

      <p> var $name = 'Event';
  var $useTable = 'events';

      var $validate = array(

      'name' => VALID_NOT_EMPTY,

      'date' => VALID_NOT_EMPTY,

      'location' => VALID_NOT_EMPTY,

      'flyerpreview' => VALID_NOT_EMPTY,
 
      'flyer' => VALID_NOT_EMPTY);</p>

      <p> //The Associations below have been created with all possible keys, those that are not needed can be removed
 
      var $hasAndBelongsToMany = array(
      'Artist' => array('className' => 'Artist',
      'joinTable' => 'artists_events',
      'foreignKey' => 'event_id',  
      'associationForeignKey' => 'artist_id',
      'unique' => true,
      'conditions' => '',  
      'fields' => '',  
      'order' => '',  
      'limit' => '',
      'offset' => '',  
      'finderQuery' => '',
      'deleteQuery' => '',
       'insertQuery' => ''
      )
      );</p>
      <p>}
?>
klagoggle
 
Beiträge: 10
Registriert: Mi 4. Jun 2008, 22:30

Re: Verwirrt was ich nehmen soll

Beitragvon mbrod » Do 24. Sep 2009, 23:20

Habe gerade meine ersten Erfahrungen mit HABTM gemacht und dachte, dass es hier an dieser Stelle passt. Wie hier vorher schon beschrieben klappt es mit der Konsole nämlich sehr gut, ja wenn nur die Tabellen entsprechend vorbereitet sind. Daher hier meine SQL-Statements zur Erzeugung der Modelle "Member" und "Partnership":
Code: Alles auswählen
CREATE TABLE `members` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `forename` varchar(64) DEFAULT NULL,
  `name` varchar(64) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Code: Alles auswählen
CREATE TABLE `partnerships` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Man beachte, dass die beiden Models keine member_id oder partnership_id haben, dafür aber die "Mitteltabelle":

Code: Alles auswählen
CREATE TABLE `members_partnerships` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `member_id` int(11) DEFAULT NULL,
  `partnership_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `member_id` (`member_id`,`partnership_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


Was ich dann nach dem "Backen" vorfand, hat mich schon begeistert: Für's erste alles da, was man so braucht.
mbrod
 
Beiträge: 199
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Verwirrt was ich nehmen soll

Beitragvon Dogo » Fr 25. Sep 2009, 10:28

Also HABTM ist nicht so schwer. Das löschen und so bekommt Cake von selbst hin.

Drei Tabellen:
  • events *muss "artist_id" als int enthalten
  • artist *muss "event_id" als int enthalten
  • artist_events *muss "id", "event_id" und "artist_id" jeweils als int enthalten. Mehr nicht.

* Bedingungen an die Datenbanktabellen

Dann in den zwei Models:
(event.php)
Code: Alles auswählen
var $hasAndBelongsToMany = array('Artist');


(artist.php)
Code: Alles auswählen
var $hasAndBelongsToMany = array('Event');


Und das wars auch schon.
Benutzeravatar
Dogo
 
Beiträge: 63
Registriert: Do 6. Aug 2009, 00:59
Wohnort: Wuppertal

Re: Verwirrt was ich nehmen soll

Beitragvon Jörg » Fr 25. Sep 2009, 10:55

Hallo zusammen,
vielen Dank für die zahlreichen Lösungsansätze und Lösungsvorschläge.

Ich denke, dass wir damit zahlreiche Fragen rund um die HABTM-Problematiken lösen / beantworten können. :-)

Gruß
Jörg
Jörg
 
Beiträge: 130
Registriert: Di 13. Mai 2008, 13:45
Wohnort: Bremen
CakePHP-Version: 2.0.3, 1.3.x
OS: Win7/Ubuntu

Vorherige

Zurück zu Models

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast