Mit \ Zend_Db_Table_Abstract :: find ($ id). Das Feld MySQL SET gibt die Zeichenfolge anstelle von (gesucht) int zurück

8

Grundlegende Frage Wie kann ich die 'type' -Spalte als Integer-Wert aus dem Tabellen-Mapper abrufen?

Ich habe eine PHP Zend Framework 1.12 Anwendung, auf der eine Website läuft. In MySQL gibt es mehrere Tabellen mit mehreren Spalten. In zwei Tabellen verwende ich den SET-Typ. Die Spalte hat den Namen 'type' und 'set (' LOCAL ',' EXTERNAL ')'. Verwechseln Sie diesen Feldtyp bitte nicht mit dem ENUM!

Bisher ist es kein Problem, die Tabelle abzufragen und die Typspalte als INT oder STRING abzurufen:

%Vor%

Aber in dieser Anwendung gibt es auch Tabellen-Mapper, die Zend_Db_Table_Abstract erweitern. Innerhalb des Mappers befindet sich die 'find ()' Methode. Standard, der in das Abstract integriert ist, um Datensätze anhand ihres Primärschlüssels zu finden. Aber .. Wenn ich das Objekt verwende, um einen Datensatz zu holen, finde ich die folgende Antwort innerhalb meiner populate Methode:

%Vor%

Das manuelle Abfragen (und das Definieren der Spalten selbst) wäre eine Option ($ this- & gt; select () - & gt; von ...), aber gibt es keinen eleganteren Weg?

(Ich weiß, dass ich eine ältere Version von ZF verwende, aber die Aktualisierung würde in diesem Moment zu viel Zeit kosten.)

    
Benz 11.12.2014, 20:00
quelle

1 Antwort

0

Nachdem die Bounty gestartet wurde, bemerkte ich, dass es keine wirklich einfache Antwort gab, also begann ich, tiefer in Zend Framework 1.12 und die Mapper-Objekte zu schauen, die ich benutze. Ich habe festgestellt, dass die find () -Methode nur die Primärschlüsselspalten verwendet, um eine Abfrage zu erstellen. Ausgehend von diesem Wissen habe ich meine eigene 'find ()' Methode erstellt, die im 'abstract Model Mapper' liegt und den 'find ()' Mapper in der Klasse verwendet, die \ Zend_Db_Table_Abstract

erweitert %Vor%

Jetzt muss ich eine Methode hinzufügen, die die Standardspalten überschreibt. Also habe ich eine Methode namens 'overrideColumns ()' erstellt, die ein Array zurückgibt, das mit Spaltennamen gefüllt ist, die ausgewählt oder überschrieben werden müssen.

%Vor%

Und von diesem Punkt an musste ich nur die $ Select-Abfrage anpassen, so dass sie die Methode 'overrideColumns ()' verwenden würde. Die ganze Klasse wird also zu etwas wie:

%Vor%

Also ... nach einer Weile habe ich die Antwort gefunden, nach der ich gesucht habe, ohne alle Spalten deklarieren zu müssen.

    
Benz 30.12.2014, 09:17
quelle

Tags und Links