Zum Inhalt springen

Model erweitern ohne neues Datenbank Feld

Erstellt am 29. März 2013 · 4 Antworten · letzte Antwort am 8. April 2013

Tags: Frage

Jan.​S ·

Hallo,
ich suche gerade eine Möglichkeit das Model um ein Attribut zu erweitern.

Ich würde gerne aus den Model herraus ein Repository aufrufen und das Ergebnis der Abfrage wieder im Model platzieren.

Ich hoffe es hat jemand verstanden was das Ziel sein soll 🙂

Das konkret würde ich gerne das Produkt haben.
Das Problem ist das es kein Datenbankfeld Produkte gibt und ich es auch nicht haben möchte.
Ich möchte viel mehr über das Repository das Produkt raussuchen, weiß aber nicht so richtig wie ich es anstellen soll.

Ich habe versuch in der methode getProdukte()
Das repository aufzurufen, aber das hat leider nicht funktioniert. :-/

Weiß jemand wie es geht? :o

	/**
	 * produkte
	 *
	 * @var Tx_AuwPiper_Domain_Model_Produkte
	 */
	protected $produkte;


	/**
	 * Returns the produkte
	 *
	 * @return Tx_AuwPiper_Domain_Model_Produkte $produkte
	 */
	public function getProdukte() {
		return $this->produkte;
	}



	/**
	 * Sets the produkte
	 *
	 * @param Tx_AuwPiper_Domain_Model_Produkte $produkte
	 * @return void
	 */
	public function setProdukte(Tx_AuwPiper_Domain_Model_Produkte $produkte) {
		$this->produkte = $produkte;
	}
harald1972 ·

Hallo Jan,

zwar versteh ich zum einen nicht, was du willst, zum anderen sieht das für mich nach einer Grundlagen-Frage aus, wie ich sie grad eben erst hier im Forum schonmal beantwortet hab.

Allerdings will ich dich drauf hinweisen, daß du zwar von Produkt/Produkte in Einzahl UND auch in Mehrzahl sprichst. Deine Klasse nennst du dennoch

Tx_AuwPiper_Domain_Model_Produkte

Der Klassenname deiner Model-Objekte sollte Einzahl sein, weil eben ein Produkt auch nur ein (in Zahlen:1) Produkt ist. Wenn du mehrere in einen Container packen willst, nimmst du besser ein Tx_Extbase_Persistence_ObjectStorage oder zur Not auch mal ein Array.

Gruß Harald

Jan.​S ·

Das mit der Mehrzahl (Produkte) ist mir auch schon aufgefallen, aber lässt sich jetzt leider nicht mehr so ohne weiteres ändern.

Aber die Kernfrage, welche ich habe ist eigentlich ob es möglich ist im Model auf ein Repository zuzugreifen.

harald1972 ·
Jan.S schrieb

Das mit der Mehrzahl (Produkte) ist mir auch schon aufgefallen, aber lässt sich jetzt leider nicht mehr so ohne weiteres ändern.

Ach was! Das geht ganz leicht. Einfach nochmal von vorne 😉
Nicht zur Strafe, nur zur Übung

Jan.S schrieb

Aber die Kernfrage, welche ich habe ist eigentlich ob es möglich ist im Model auf ein Repository zuzugreifen.

Möglich ist sowas schon. Imho ist das aber der falche Ansatz.
Zur Not kannst du dir auch ein temporäres Repository in deiner Methode anlegen.
Also einfach ein $foobar= new Tx_AuwPiper_Domain_Repository_ProdukteRepository();

Aber soweit ich das ganze Paradigma verststanden hab, sollten die Controller mit den Repositories komunizieren, und nicht dein Model.
Mir scheint da was im Ansatz falsch zu sein, wenn du diesen Weg gehen willst.

Nochmal zu deiner "Kernfrage": Ich denke, daß es möglich ist, aber ich denke auch, daß es trotzdem der falsche Ansatz ist.

Bedenke übrigens auch, daß die Persistierung immer erst nach Abschluss einer Anfrage erfolgt.
z.B.:

public function updateAction(Tx_MyExt_Domain_Model_Foo $foo) {
	$this->fooRepository->update($foo); // hier weiß die DB noch nichts neues
	$this->redirect('list');   // erst wenn wir hier raus sind
}
kainobi ·

Ich stimme harald1972 in allen Punkten zu ;-)
Nimm den Extension Builder, setz Dich in Ruhe hin, und baue deine Datenstruktur so auf wie sie sein muss, mit Relationen und allem was dazu gehört. Das kann schon mal etwas dauern. Aber wenn Du das sauber machst, dann solltest Du auch ohne so eine "schwindlige" Lösung auskommen...