2017-02-11 4 views
1

Ich arbeite an einem Symfony2.3-Projekt und ich brauche eine input number, die ich den Wert mit Dezimalzahlen speichern und die Pfeile probiert. Mit dem folgenden Code kann ich die Dezimalzahlen anzeigen, aber dann wird nur der ganze Teil gespeichert.So speichern Sie eine Dezimalzahl mit Symfony2

Entity

/** 
* 
* @ORM\Column(name="horas", type="decimal", scale=1) 
* @Assert\NotBlank() 
*/ 
private $hours; 

Formtype

->add('hours','integer', array('required' => true,'attr' => array('min' => 15,'max' => 40,'step' => 0.5))) 

Ich schätze Ihre Hilfe.

+0

By the way, Symfony 2.3 wird nicht mehr gepflegt. 2.8 ist die aktuelle LTS-Version. – lxg

+0

Ich weiß danke, aber ich habe das finale Projekt mit dieser Version gestartet und ich bevorzuge es zu beenden, bevor ich die Version modifiziere, die ich gerade mal machen werde. – Joseph

Antwort

2

Um einen Fließkommawert in einem Dezimalfeld zu speichern, müssen Sie zuerst entscheiden, wie viele Stellen Sie vor dem Punkt und wie viele danach benötigen. Zum Beispiel könnte Ihr Feld wie folgt aussehen:

/** 
* @ORM\Column(type="decimal", precision=3, scale=1) 
* @Assert\Range(min=15, max=40) 
*/ 
private $hours; 

In einem decimal Feld, das precision ist immer die Gesamtzahl der Stellen, während scale die Länge der Bruchteil bezeichnet. Im obigen Beispiel könnte das Dezimalfeld Werte zwischen 0 und 99 speichern, während eine Ziffer nach dem Punkt gespeichert würde.

Beachten Sie, dass Doctrine das Feld als Zeichenfolge darstellt. Wenn Sie also die Entität abrufen, lautet der Wert des Feldes "20.5" (d. H. Eine Zeichenfolge). Sie müssen den Wert manuell erneut in einen Gleitkommawert konvertieren. Dies kann in dem Getter für das Feld erfolgen:

public function getHours() 
{ 
    return (float) $this->hours; 
} 
+0

Hallo @lxg, danke für die Antwort. Ich muss Daten von 20.5 speichern, wo die Gesamtzahl der Stunden eine Person arbeitet, zum Beispiel wäre dieser Fall 20 Stunden und eine Hälfte. Was müsste er in diesem Fall tun? – Joseph

+0

Ok, ich verstehe. Ich habe meine Antwort entsprechend geändert. – lxg

+0

Sie haben das, was Sie mir gesagt haben, geändert, aber speichern Sie den Wert immer noch ohne einen korrekten Bruchteil. Für den Fall von 20,5 Speicher bleibt 20,0. Könnte es bei dem angegebenen Formtyp liegen? – Joseph

Verwandte Themen