Zum Inhalt springen

Felder vom anderen Model ausgeben

Erstellt am 8. Mai 2013 · 3 Antworten · letzte Antwort am 13. Mai 2013

Tags: Fluid, Frage

Denex ·

Hallo zusammen,

langsam verzweifle ich hier.

Aktuell sitze ich an einem Referenzsystem in dem es Kunden(1) und Projekte(n) gibt. Bisher gabs da auch keine großen Probleme aber jetzt versuche ich in der Show Action vom Projekt auf Daten des Kunden zuzugreifen.
Ergebnis soll sein, dass auf einer Projektseite die Quer-Verweise zu den anderen Projekten des Kunden sind.

Prinzipiell hatte ich gedacht, dass ich das mit {project.customer.projects} (im for viewHelper) ausgeben könnte. Hat aber leider nicht geklappt.
Eine kurze Debug Ausgabe hat mir dann auch gezeigt das {project.customer} gar nicht vorhanden ist.
Hab dann also das Model vom Projekt angepasst:

/**
 * customer
 *
 * @var Tx_RaRefs_Domain_Model_Customer
 */
protected $customer;

/**
 * Returns the customer
 *
 * @return Tx_RaRefs_Domain_Model_Customer $customer
 */
public function getCustomer() {
	return $this->customer;
}

/**
 * Sets the customer
 *
 * @param Tx_RaRefs_Domain_Model_Customer $customer
 * @return void
 */
public function setCustomer(Tx_RaRefs_Domain_Model_Customer $customer) {
	$this->customer = $customer;
}

Jetzt ist zwar das Attribut customer im Objekt des Projekts vorhanden aber drin steht immer noch nichts (weder ID noch das Kunden Objekt selbst).

Habe Model, Controller und Repositories schon mit denen aus dem blog Beispiel verglichen (Verbindung zwischen Blog und Post -> in der Show Action vom Post wird dort für den Backlink auf {post.blog} zugegriffen), aber kann da keinen relevanten Unterschied feststellen.

Hoffe jemand von euch hat eine Idee und kann mir helfen.
Danke und einen schönen Abend sowie Feiertag und an jene die Freitag Urlaub haben, ein schönes langes Wochenende 😉

Dennis

PS:
Hab schon alles auf Rechtschreibfehler geprüft
Das Datenbankfeld heißt customer und das Model auch Tx_RaRefs_Domain_Model_Customer

Unbekannter Benutzer ·

Also das Datenbankfeld dazu gibt es? Und das ist auch gefüllt mit der Uid des Customer? Und das ganze ist im TCA auch entsprechend konfiguriert?

Denex ·

Sry das ich so spät antworte. Hatte anscheinend E-Mail Benachrichtigung ausgeschaltet und hab jetzt auf der Arbeit erst wieder reingeguckt.

Datenbankfeld ist vorhanden. Den Grundaufbau der Extension habe ich über den Extension Builder erledigt, wo bei einer 1:N Relation ja auch das entsprechende Feld angelegt ist (heißt auch customer 😉 ).
TCA habe ich angepasst gehabt, da die Default Konfiguration ja "passthrough" ist. Jetzt sieht es so aus:

'customer' => array(
	'exclude' => 0,
	'label' => 'LLL:EXT:ra_refs/Resources/Private/Language/locallang_db.xml:tx_rarefs_domain_model_project.customer',
        'config' => array(
		'type' => 'select',
		'foreign_table' => 'tx_rarefs_domain_model_customer',
		'foreign_field' => 'uid',
		'foreign_label' => 'name',
		'maxitems'      => 1,
		'minitems'      => 1,
	),
),

Hier auch nochmal die relevanten Auszüge aus der ext_tables.sql

#
# Table structure for table 'tx_rarefs_domain_model_customer'
#
CREATE TABLE tx_rarefs_domain_model_customer (

	uid int(11) NOT NULL auto_increment,
	pid int(11) DEFAULT '0' NOT NULL,


	name varchar(255) DEFAULT '' NOT NULL,
	logo text NOT NULL,
	industry varchar(255) DEFAULT '' NOT NULL,
	projects int(11) unsigned DEFAULT '0' NOT NULL,

        [...]

	PRIMARY KEY (uid),
	KEY parent (pid),
	KEY t3ver_oid (t3ver_oid,t3ver_wsid),
	KEY language (l10n_parent,sys_language_uid)
);

#
# Table structure for table 'tx_rarefs_domain_model_project'
#
CREATE TABLE tx_rarefs_domain_model_project (

	uid int(11) NOT NULL auto_increment,
	pid int(11) DEFAULT '0' NOT NULL,

	customer int(11) unsigned DEFAULT '0' NOT NULL,

	title varchar(255) DEFAULT '' NOT NULL,
	[...]

	PRIMARY KEY (uid),
	KEY parent (pid),
	KEY t3ver_oid (t3ver_oid,t3ver_wsid),
	KEY language (l10n_parent,sys_language_uid)
);
Denex ·

Fehler gefunden!

Es hat am TCA gelegen.
Wie es so schön heißt, ist weniger manchmal mehr ^^

foreign_field aus der TCA Konfiguration genommen und es hat geklappt.
So muss es also aussehen:

'customer' => array(
	'exclude' => 1,
	'label' => 'LLL:EXT:ra_refs/Resources/Private/Language/locallang_db.xml:tx_rarefs_domain_model_project.customer',
        'config' => array(
		'type' => 'select',
		'foreign_table' => 'tx_rarefs_domain_model_customer',
		'maxitems'      => 1,
	),
),

foreign_label ist auch nicht nötig, wenn das gewünschte Feld bereits in der extTables.php für die entsprechende Tabelle gesetzt ist.

Danke kitsunet für deinen Antwort. Hätte in der TCA wahrscheinlich nicht so akribisch nachgeschaut wenn du nicht danach gefragt hättest.

Gruß
Dennis