Model: Results um eigene Funktionen erweitern

Hallo,

ich bin zurzeit dabei in einer Erweiterung konsequent Models für alle angelecten DCAs einzusetzen und bin immer noch absolut verblüfft, wie unnötig umständlich ich bisher mit Datenbankabfragen umgegangen bin.

Inzwischen habe ich etwas Blut geleckt und frage mich, in wieweit sich die Models noch optimieren lassen. Konkret geht es hier um die Erweiterung von Results um eigene Funktionen, und wie ich das am elegantesten realisiert bekomme.

Ich habe an einer Stelle beispielsweise im DCA per MultiColumnWizard die Möglichkeit hinzugefügt, Jahre auszuwählen.

year_select.png

Das Ganze wird in der Datenbank serialisiert gespeichert. Da ich es an verschiedenen Stellen als sauberes Array benötige, habe ich das Model hier um eine entsprechende Funktion erweitert.

PHP-Code:

public static function years($ id)
{
    
$ election self::findById($ id);
    
$ years unserialize($ election->years);
    return 
$ years array_map(function($ year){return $ year["years"];},$ years) : null;



Auf diese Weise kann ich mir für eine Wahl die Jahre einfach folgendermaßen ausgeben lassen.

PHP-Code:

ElectionModel::years(1); 


Soweit so gut. 🙂 Nun möchte ich das Ganze aber sehr gerne auch auf Results übertragen. Beispielsweise in diesem Fall.

PHP-Code:

$ election ElectionModel::findByPid(0);
while ( 
$ election->next() ) {
  
$ years $ election->years;



Hier bekomme ich die Jahre wieder als serialisierten String zurück. Um das Ganze wieder durch die Funktion laufen zu lassen, könnte ich natürlich wie folgt vorgehen.

PHP-Code:

$ election ElectionModel::findByPid(0);
while ( 
$ election->next() ) {
  
$ yearsArr ElectionModel::years($ election->id);



Das finde ich aber etwas unschön. Lieber würde ich es so lösen.

PHP-Code:

$ election ElectionModel::findByPid(0);
while ( 
$ election->next() ) {
  
$ yearsArr $ election->yearsArr;



$ election->yearsArr würde in diesem Falle eine Funktion anstoßen die prüft, ob pid gleich 0 ist und das Jahr direkt aus der Spalte "years" verarbeiten und erst im Falle, dass pid nicht gleich 0 ist wieder auf die Funktion "years" zurück greifen.

Ich kann im Model direkt ja einfach eigene Variablen hinzufügen.

PHP-Code:

public function __get($ value) {
  if ( 
$ value == "yearsArr" ) {
    return 
meine_funktion();
  }
  return 
parent::__get($ value);



Das wirkt sich aber scheinbar nicht auf die Results aus. Hat jemand eine Idee, wie ich das bewerkstelligen kann, dass es sich im Idealfall auf ElectionModel::findById(), ElectionModel::findByPid(), ElectionModel::findAll() u.s.w. auswirkt?

Vermutlich ganz einfach und ich steh nur auf dem Schlauch. Aber ich wollte lieber einmal nachfragen, bevor ich hier etwas ähnlich unnötig umständliches baue wie die bisherigen Datenbankabfragen auf die DCA-Tabellen. 🙂

Vielen Dank und beste Grüße,
Dennis

Angehängte Grafiken

Related Post

Leave a Reply

Your email address will not be published. Required fields are marked *