2016-08-16 10 views
2

カラムを 'varchar'から 'money'に変換しようとしています。 明らかに、デフォルトのスキーマは間違っています。私はPriceRuleのフィールドを保存しようとすると、これは私が取得エラーです:cakePHPでSQL関数を使用するbeforeSave

SQL Error: Disallowed implicit conversion from data type varchar to data type money, 'PriceRule', column 'UnitPrice'. Use the CONVERT function to run this query.

したがって、私は、フィールドのデータ型を変換する変換関数を使用するようにしてください。私のモデルでは

public function beforeSave($options = array()){ 
    $UnitPrice = $this->data["PriceRule"]["UnitPrice"]; 
    $this->data["PriceRule"]["UnitPrice"] = 'CONVERT(money,$UnitPrice)'; 
} 

これは、それがを生成SQLです:

UPDATE [pricerule] 
SET [pricepolicyid] = 1, 
     [producttypeid] = 1, 
     [unitprice] = 'CONVERT(money,$UnitPrice)', 
     [minquantity] = 1, 
     [maxquantity] = 4, 
     [modifiedby] = 1055, 
     [modifieddate] = '2016-08-16 11:18:11', 
     [active] = '1' 
WHERE [pricerule].[priceruleid] = 62 

CONVERT関数は、文字列、いないとして作成されるため、このクエリは実行されません。関数。

私は継続的に回避策を見つけようとしており、Googleで無限の掘り下げを行っています。役立つものは何も見つかりません。

誰かがこれを修正する方法があれば、それは素晴らしいことです!代わりに、どんな助けも素晴らしいです!

ありがとうございます!

+1

ようなPHPにお金に変換しますか?それから、あなたはそれと闘う必要はありません。これをコード内にテキストとして残し、誰かが無効なデータを入れた場合はどうなりますか?アプリケーションの側面から、正しいデータ型を使用することと同様に重要です。 –

+0

@SeanLangeどのようにすればいいですか? – Anthony

+0

私は手がかりがありません。私はPHPを綴ることはできませんが、あなたのコードのデータ型が文字列であることを示すような更新でそれを変換しようとしています。確かに、使用できる数値データ型があります。たぶん誰かがPHPの知識を渡すことも助けることができます。 –

答えて

0

ちょうどあなたのコード内のデータ型を修正しないのはなぜこの

$UnitPriceInMoney = money_format('%.2n',$UnitPrice); 

PHP money_format

関連する問題