Hmm, jetzt habe ich ziemlich viel herumgespielt, aber ich sehe keine
halbwegs gut funktionierende Lösung :(

Ich habe (mal stark vereinfacht) drei Tables:


Adressen:
CREATE TABLE IF NOT EXISTS `addresses` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `street` varchar(45) collate utf8_unicode_ci NOT NULL,
  `city` varchar(45) collate utf8_unicode_ci NOT NULL,
  `zipcode` varchar(45) collate utf8_unicode_ci default NULL,
  `street_nr` varchar(45) collate utf8_unicode_ci default NULL,
  `country` varchar(45) collate utf8_unicode_ci NOT NULL,
  `additional_address_line` varchar(45) collate utf8_unicode_ci
default NULL,
  `title` varchar(45) collate utf8_unicode_ci default NULL,
  `gender` varchar(45) collate utf8_unicode_ci default NULL,
  `personnel_id` int(10) unsigned default NULL,
  `client_id` int(10) unsigned default NULL,
  `customer_id` int(10) unsigned default NULL,
  `distributor_id` int(10) unsigned default NULL,
  `stock_id` int(10) unsigned default NULL,
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY  (`id`),
  KEY `fk_addresses_personnels` (`personnel_id`),
  KEY `fk_addresses_clients` (`client_id`),
  KEY `fk_addresses_customers` (`customer_id`),
  KEY `fk_addresses_distributors` (`distributor_id`),
  KEY `fk_addresses_stocks` (`stock_id`)
)

Kunden:
CREATE TABLE IF NOT EXISTS `customers` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `business_type_id` int(10) unsigned default NULL,
  `subsidiary_id` int(10) unsigned default NULL,
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY  (`id`),
  KEY `fk_customers_business_types` (`business_type_id`),
  KEY `fk_customers_subsidiaries` (`subsidiary_id`)
)

Transaktionen (Rechnung, Auftragsbestätigung usw.):
CREATE TABLE IF NOT EXISTS `customer_transactions` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `created` datetime default NULL,
  `modified` datetime default NULL,
  `customer_id` int(11) unsigned default NULL,
  `customer_transaction_type_id` int(11) unsigned default NULL,
  PRIMARY KEY  (`id`),
  KEY `fk_customer_transactions_customers` (`customer_id`),
  KEY `fk_customer_transactions_customer_transaction_types`
(`customer_transaction_type_id`)
)


Die Beziehungen, die hier relevant sind, sind also:

customers hasMany addresses
customers hasMany customer_transactions
addresses belongsTo customers
customer_transactions belongsTo customers


Die gebackene CRUD Funktionalität von Cake geht dann so:
1. füge neue Adresse hinzu
2. füge neuen Kunden hinzu und setze die Verbindung
3. füge neue Transaktion hinzu und setze die Verbindung.
Ein Warenwirtschaftssystem sollte aber wesentlich einfacher
funktionieren:
1. füge neue Transaktion & Kunde & Adresse hinzu und setze die
Verbindungen.

Ich muß also in einem Formular Daten aus drei verschiedenen Tables
anzeigen, anlegen und verändern können.
die saveAll() Funktion speichert mir ja die Daten, die aus dem
Formular kommen.
Allerdings "verstößt" das Formular krass gegen die DRY (Don't repeat
yourself) Regel, weil ich ja für die views der Transaktion alle
Formularteile aus den Views von Kunde und Adresse herauskopieren muß.
Oder jedes kleine Formular als Element kapseln und mit vielen If
klauseln vollstopfen, damit es unter allen umständen richtig
funktioniert, was dann gegen die "loose couple" Regel verstoßen würde.

Also ist der CakePHP Weg wirklich das man seine Views in Elemente bzw.
Helper zerlegt und sie von da aus benutzt, oder übersehe ich
irgendetwas?


Nochmal in kürzer: Ich würde gerne "schlaue" Formulare (Views) bauen,
die mir bei einem Auswahlfeld (z.B. Welcher Kunde gehört zu dieser
Transaktion) auch anbieten einen neuen Kunden anzulegen, der dann
natürlich ins Transaktionsformular übernommen wird. Geht das einfach?
Wenn ja: wie?
--~--~---------~--~----~------------~-------~--~----~
Bitte bei Fragen immer auch die aktuell verwendete cakePHP Version angeben und
wenn möglich auch das verwendete Betriebssystem und die PHP Version. Danke.
Sie erhalten diese Nachricht, weil Sie Mitglied sind von Google Groups-Gruppe 
"CakePHP-de für deutsche CakePHP Entwickler".
 Für das Erstellen von Beiträgen in dieser Gruppe senden Sie eine E-Mail
an [email protected]
 Um sich von dieser Gruppe abzumelden, senden Sie eine E-Mail an [EMAIL 
PROTECTED]
 Weitere Optionen finden Sie in dieser Gruppe unter 
http://groups.google.com/group/cakephp-de?hl=de
-~----------~----~----~----~------~----~------~--~---

Antwort per Email an