DatabaseObject::refresh implementieren

  • App
    WoltLab Suite Core

    Ich würde mich über eine neue Methode DatabaseObject::refresh freuen.


    Statt

    PHP
    $foo = new Foo($fooID);
    $foo->changeStatus($newStatus);
    
    // we need a fresh foo with updated status
    $foo = new Foo($fooID);

    kann man dann

    PHP
    $foo = new Foo($fooID);
    $foo->changeStatus($newStatus);
    
    // we need a fresh foo with updated status
    $foo->refresh();

    schreiben. Andere große Frameworks haben auch einen solche Methode, z.B. Laravel.

    Ersterer Code wird auch öfters im Framework genutzt und könnte dann etwas gekürzt/vereinfacht werden:

    WoltLab/WCF
    WoltLab Suite Core (previously WoltLab Community Framework) - WoltLab/WCF
    github.com
    WoltLab/WCF
    WoltLab Suite Core (previously WoltLab Community Framework) - WoltLab/WCF
    github.com
    WoltLab/WCF
    WoltLab Suite Core (previously WoltLab Community Framework) - WoltLab/WCF
    github.com
  • Tim Düsterhus September 23, 2021 at 1:26 PM

    Added the Label Won’t be implemented
  • Hallo,

    ich sehe keine Option das zuverlässig umzusetzen, da die DBOs, im Gegensatz zu den Eloquent Models, nicht wissen auf welche Weise sie erstellt wurden. Beispielsweise ist es nicht unüblich, zusätzliche Tabellen mit reinzujoinen oder im Falle von Listen, die Inhalte fertig als Array zu übergeben.

    Zusätzlich ist es denkbar, dass DBOs bestimmte Daten in separaten Attributen cachen, die beim refresh() dann ebenfalls zurückgesetzt werden müssen. Damit müssten in vielen DBOs Anpassungen erfolgen, um refresh() korrekt zu implementieren.

    Entsprechend ist eine generische Form der Aktualisierung extrem fehlerbehaftet. Der Aufrufer weiß am besten, welcher Zustand benötigt wird und ein $something = new Something($something->someID); ist auch nicht viel komplizierter als ein $something->refresh();

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!