Verzweiflung über save() in oxBase/oxOrder

Guten Tag liebe Community,

schon länger lese ich hier mit, habe aber bisher glücklicherweise immer durch die Forensuche eine Lösung gefunden und musste euch nicht extra belästigen. Jetzt habe ich aber ein Problem, das mich verzweifeln lässt.

Mal ein Code-Schnipsel:

$oOrder = oxNew('oxorder');
$oOrder->load('456cc44b6705a2498efba5d175c1048c');
$oOrder->oxorder__oxbillustid = new oxField('133' , oxField::T_TEXT);
$oOrder->save();

Disclaimer: aus Verzweiflung habe ich es auch mit assign() und __set versucht. Save() lässt sich aber auch da nicht dazu überreden zu speichern.

Eigentlich nichts besonderes und wird so auch in anderen Modulen und der Oxid-Core verwendet. Aus irgend einem mir nicht erfindlichen Grund speichert dieser Vorgang aber nichts. Die oxid ist korrekt, alles passt und der gleiche Aufruf mit einer ID aus oxarticles - dieser Code steht in einer Cronjob-Datei zum Test - speichert ohne zu Murren.

Hat mir irgendwer einen Strohhalm an dem ich mich festkrallen kann? :slight_smile:

Vielen Dank im Voraus.

Liebe Grüße,
Johannes

Die Infos sind recht mager, aber auf den ersten Blick sieht das korrekt aus. Steht da vielleicht irgendwo

parent::save();

?

Ich habe den Testcase noch weiter versucht zu isolieren. Es gibt es um diesen Code herum nur noch eine Cronjob-Datei, die bootstrap einbindet und sonst nichts.

Weiterhin kein Erfolg. Aus diesem Grund habe ich jetzt einfach eine kleine Hilfsfunktion geschrieben, die über oxDB Calls eine Art kombiniertes assign + save zu machen, damit mein Modulcode schön schlank bleibt. Vielleicht ist es auch nur ein Problem mit der Oxid-Version und das ganze behebt sich von selbst mit einer nächsten Version.

public static function updateObjectInDB(oxBase $oObject, array $aFields){
        $sUpdateSQL = '';

        $iLength = count($aFields);
        $iCount = 1;

        foreach($aFields as $key => $value){
            $sUpdateSQL .= $key . " = '" . $value . "'";

            if($iCount < $iLength){
                $sUpdateSQL .= ", ";
            }
            $iCount++;
        }
        $sSQL = "UPDATE " . $oObject->getCoreTableName() . "
                      SET " . $sUpdateSQL . "
                      WHERE oxid = '" . $oObject->getId() . "'";

        // Hier fehlt noch Fehlerbehandlung I know ;)
        oxDb::getDb(oxDb::FETCH_MODE_ASSOC)->execute($sSQL);
    }

Falls ich noch etwas heraus bekomme - leider keine Zeit, Chef macht Druck :smiley: - werde ich die Lösung gerne posten. Bis dahin verbleibe ich kopfkratzend :slight_smile:

Viele Grüße,
Johannes