Vom: 16.08.2012

Pimcore multihref in Dokument programmatisch befüllen

Für ein Kundenprojekt mussten Daten aus einem alten Auftritt übernommen werden. Problemstellung waren dabei Dokumente mit Multihref, die per Import-Script mit Objekten (Immobilien) gefüllt werden mussten. Folgender Code erfüllt diese Aufgabe:

$objekt = Object_Objekt::getByPath("/objekte/".$objekt_key);
$document = Document::getById($document_id);
$multihref = $document->getElement("objekte");
$data = $multihref->getDataForResource();
$data[] = array("id" => $objekt->getId(), "path" => $objekt->getFullPath(), "type" => "object", "subtype" => "objekt");
$multihref->setDataFromEditmode($data);
$multihref->getResource()->save();
$objekt_document->update();

Die ganze Sache hat nur einen Schönheitsfehler: die Dependencies werden nicht mit aktualisiert, erst bei händischem Speichern des Dokuments werden diese aktualisiert. Ich hab zwar versucht, diese ebenfalls per Script zu ergänzen, dies hatte aber keine Wirkung:

// Das funktioniert nicht...
$objekt_document->clearDependedCache();
$document_dependencies = $objekt_document->getDependencies();
$document_dependencies->addRequirement($objekt->getId(), "object");
$document_dependencies->save();

Für Hinweise, was hier falsch läuft, wäre ich daher dankbar :-)

EDIT:

Zita Kemeny hat in den Kommentaren eine Lösung zur Verfügung gestellt. Die sieht, angepasst auf vorhergehendes Problem, folgendermaßen aus:

$dependency = new Dependency();
$dependency->setSourceId($document_id);
$dependency->setSourceType(“document”);
$dependency->addRequirement($objekt->getId(), “object”);
$dependency->save();

Danke, Zita!

EDIT 2:

Schubie hat in den Kommentaren darauf hingewiesen, dass die Notwendigkeit zur manuellen Dependency-Erzeugung beim programmatischen Anlegen von Objekten nicht mehr gegeben ist, da es mittlerweile wie erwartet automatisch funktioniert. Danke für den Hinweis!