edit:
In Objekten str_repeat(", die Arrays von Objekten enthalten", n) ein Objekt finden und dessen Properties zu aktualisieren funktioniert nicht, wenn ein Array erweitert werden soll.
ende edit (Ist etwas länglich geworden, deshalb hab' das eigentliche Problem mal vornan gestellt)
Moin,
Ich habe mir gedacht, um tiefer einzusteigen, wäre es am besten, mal ein eigenes Datenbank-Framework anzufangen (zum Lernen! Klappt auch ganz gut - bisher)
Jetzt bin ich bei der Master-Detail-Problematik und habe ein Problem bei der Zuweisung der von der DB zurückgelieferten Werte.
Mein Entwurf geht von existierenden je DB-Tabelle spezialisierten-Objekten (im Code mit Präfix db_) aus, die hier verschachtelt werden:
Die joinWith- und joinType-Einträge brauche ich fürs SQL generieren.
Ich schicke das Statement an die DB fetch das Result in ein Array, iterier das durch, bekomme anhand von Alias-Präfixen heraus, welche Result Column zu welchem Teil des Objekts gehört.
Da stehe ich nun mit einer Hand voll Werte, die zu bspw. 'detb' gehören.
Um die in das Objekt zu speichern, suche ich zunächst nach eben jenem Schlüssel 'detb' in einem Array, schreibe die Werte in die entsprechenden Properties und mache einen tiefen Clone von dem Eintrag, den ich anschliessend "wertbereinige" (Datenproperties auf null setzen).
Bis hierher klappt es, aber ich habe noch keinen Weg gefunden, diesen Clone dynamisch an das Array im Objekt anzuhängen.
Ausprogrammiert müsste es ja so aussehen (Ja, die Nullen sind nur proforma da, am Iterieren (findet noch gar nicht statt) liegts nicht):
Mich wundert eben, dass ich beim Setzen der Werte in die Properties saubere Referenzen bekomme, also $this am Ende aktualisiert ist.
Wenn ich denselben Weg für das pushen des Arrays wähle, nimmt $this das nicht an:
Ich hab auch schon verschiedenste Varianten von &, also byRef ausprobiert - ohne Erfolg (bzw. hat es in zwei Konstellationen den Apache vom Sockel gehauen)
Geht das nicht? Oder nur mit Pfad zum Array in nem String zusammensetzen und eval?
Ich hoffe Ihr könnt mir helfen.
Danke im Voraus!!
In Objekten str_repeat(", die Arrays von Objekten enthalten", n) ein Objekt finden und dessen Properties zu aktualisieren funktioniert nicht, wenn ein Array erweitert werden soll.
ende edit (Ist etwas länglich geworden, deshalb hab' das eigentliche Problem mal vornan gestellt)
Moin,
Ich habe mir gedacht, um tiefer einzusteigen, wäre es am besten, mal ein eigenes Datenbank-Framework anzufangen (zum Lernen! Klappt auch ganz gut - bisher)
Jetzt bin ich bei der Master-Detail-Problematik und habe ein Problem bei der Zuweisung der von der DB zurückgelieferten Werte.
Mein Entwurf geht von existierenden je DB-Tabelle spezialisierten-Objekten (im Code mit Präfix db_) aus, die hier verschachtelt werden:
PHP-Code:
class meinDBJoinObject
{
public function __construct()
{
$this->maintable = new db_master('mast');
$this->children['deta'] = array( 'joinWith' => array('mastID' => 'mastID')
, 'joinType' => 'L'
, 'srcObj' => array(new db_detaila('deta')));
$this->children['deta']['srcObj'][0]
->children['zdet'] = array( 'joinWith' => array('detaID' => 'detaID')
, 'joinType' => 'L'
, 'srcObj' => array(new db_zuodets('zdet')));
$this->children['deta']['srcObj'][0]
->children['zdet']['srcObj'][0]
->children['detb'] = array( 'joinWith' => array('detbID' => 'detbID')
, 'joinType' => 'L'
, 'srcObj' => array(new db_detailb('detb')));
}
}
Ich schicke das Statement an die DB fetch das Result in ein Array, iterier das durch, bekomme anhand von Alias-Präfixen heraus, welche Result Column zu welchem Teil des Objekts gehört.
Da stehe ich nun mit einer Hand voll Werte, die zu bspw. 'detb' gehören.
Um die in das Objekt zu speichern, suche ich zunächst nach eben jenem Schlüssel 'detb' in einem Array, schreibe die Werte in die entsprechenden Properties und mache einen tiefen Clone von dem Eintrag, den ich anschliessend "wertbereinige" (Datenproperties auf null setzen).
Bis hierher klappt es, aber ich habe noch keinen Weg gefunden, diesen Clone dynamisch an das Array im Objekt anzuhängen.
Ausprogrammiert müsste es ja so aussehen (Ja, die Nullen sind nur proforma da, am Iterieren (findet noch gar nicht statt) liegts nicht):
PHP-Code:
$this->children['deta']['srcObj'][0]
->children['zdet']['srcObj'][0]
->children['detb']['srcObj'][] = $meinDetailB_Clone;
Wenn ich denselben Weg für das pushen des Arrays wähle, nimmt $this das nicht an:
PHP-Code:
public function find_srcObj_array($findkey, $start_element = null)
//Die Funktion findet den Schlüssel und gibt das gefundene Array zurück
{
if ($start_element === null)
{
$start_element = $this;
}
if ((is_object($start_element)) || (is_array($start_element)))
{
foreach($start_element as $key => $value)
{
if ($key === $findkey)
{
return $value['srcObj'];
}
if ((is_array($value)) || (is_object($value)))
{
$newvalue = $this->find_srcObj_array($findkey, $value);
if ($newvalue)
{
return $newvalue;
}
}
}
}
return false;
}
// so teste ich gerade:
// suchen - klappt
$tmp = $this->find_srcObj_array('detb');
//zuweisen - klappt und wird im Objekt ($this) auch geändert
$tmp[0]->detbID = $db_result_rec['detb']['detbID']; // eg. 20
// clone - klappt ("eigene" Methode - Referenzen werden in Werte umgewandelt)
$tmp_x = clone $tmp[0];
// Zuweisung - klappt
$tmp_x->detbID = 200;
// ans Array pushen - klappt nur im direkten Kontext.
// Das Objekt $this bekommt davon nix mit
$tmp[] = $tmp_x
Geht das nicht? Oder nur mit Pfad zum Array in nem String zusammensetzen und eval?
Ich hoffe Ihr könnt mir helfen.
Danke im Voraus!!
Kommentar