2017-02-11 4 views
1

私はSymfony2.3プロジェクトに取り組んでいます。input numberが必要なので、小数点で値を保存して矢印をサンプリングできます。次のコードでは小数点を表示できますが、全体の部分だけが保存されます。Symfony2で10進数を保存する方法

エンティティ

/** 
* 
* @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))) 

私はあなたの助けに感謝。

+0

ところで、Symfony 2.3はもはや維持されません。 2.8が現在のLTSリリースです。 – lxg

+0

私は感謝を知っていますが、私はそのバージョンで最終プロジェクトを開始しました。 – Joseph

答えて

2

小数点以下の桁に浮動小数点値を格納するには、ポイントの前に必要な桁数とその後の桁数を決定する必要があります。たとえば、あなたのフィールドは次のようになります。

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

decimalフィールドでscaleは、小数部の長さを示しながら、precisionは、常に桁数の合計です。上記の例では、小数フィールドは0から99の間の値を格納することができ、ポイントの後の1桁は格納されます。

Doctrineはフィールドを文字列として表します。そのため、エンティティを取得する場合、フィールドの値は"20.5"(つまり文字列)になります。値を再度floatに手動で変換する必要があります。フィールドのゲッターでこれを行うことができます:

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

こんにちは@lxg、返信いただきありがとうございます。私はデータフォーム20.5を保存する必要があります。ここでは人が働く総時間数は20時間半です。この場合、彼は何をしなければならないでしょうか? – Joseph

+0

さて、わかりました。私はそれに応じて私の答えを変更しました。 – lxg

+0

あなたが言ったことを修正しましたが、分数部分が正しくなければ値を保存します。 20.5のストレージの場合、20.0が残ります。私が指摘した形式のものでもかまいませんか? – Joseph

関連する問題