2016-09-16 5 views
-2

データベースにinvoice_numberという名前の列が1つあります。Grailsのデータベースから値を取得する

class Customer { 
    String name 
    int invoiceNumber 

    static constraints = { 
     name(blank: false) 
     invoiceNumber(unique: true) 
    } 
} 

index.gspファイルには、invoice_numberのフィールドはありません。

<g:form controller="customer"> 
    Name:<br> 
    <g:textField name="name"></g:textField><br> 
    <g:actionSubmit value="Submit" action="Save"></g:actionSubmit><br> 
</g:form> 

私は1つの請求書番号を生成し、最初の顧客がフォームを送信したときに、請求書番号が第2の顧客がフォームを送信105、インボイスのように生成されてもよい。例えば5の差でそれを増加します番号は110にする必要があります。それらはデータベースに保存する必要があり、一意でなければなりません。 次に、フォームを送信した顧客の請求書番号をデータベースから取り出し、その請求書番号を別のgspファイルに渡します。

どうすればいいですか?

+1

にうーんので、顧客はわずか1枚の請求書を持つことができますか?いつまで?請求書番号を5ずつ増やすのは本当のビジネス上の理由ですか? 106..109はどうなりますか? – railsdog

+0

@railsdogが指摘しているように、なぜ請求書番号を5ずつインクリメントしたいのですか?単純に1をインクリメントしても、まだユニークにすることはできますか?また、あなたのドメインクラスからは、顧客のために1つの請求書だけがマッピングされるように見えます。これはビジネスロジックですか? –

+0

ここのすべては間違っているようです。だからこそあなたは良い答えを得ていません。 railsdogが言及していたように - 1人のユーザーと1人の請求書が奇妙に思える。クラスとして請求書を作成し、ユーザーに1対多を追加する必要があります(1つ以上の請求書が必要な場合)。番号は 'invoiceNumber = id * 5 + 100'またはそのようなものになるドメイン関数' afterInsert'です。 (ただし、別途クラスとしての請求書がある場合にのみ動作します。 –

答えて

0

あなたがform submitに電話を与えているにcontroller's actioninvoiceNumberをインクリメント/ 生成のロジックを追加する必要があります。

0

私はあなたのやり方で始めることができます(しかし、私はまだ顧客の部品ごとに1つの請求書を受け取っていないか、5ずつ増分しています)。

はい、Abhinandanに記載されているように、IDの作成ロジックをコントローラに入れることができますが、カスタムキージェネレータを作成してこのジェネレータをレコードIDに使用するようにすることができます。

我々が持っていると仮定します。

package tester2 
class Custo { 
    String id // string just to show it can be anything 
    String name 

    // tell GORM about your id attribute, and setup your 'id' column 
    // to use a custom id generator function 
    static mapping = { 
     id column:"id", generator:"tester2.CustomIdGenerator" 
    } 
} 

はその後のsrc /グルーヴィー/ tester2/CustomIdGenerator.groovy

package tester2 
import org.hibernate.id.IdentifierGenerator 
import org.hibernate.engine.spi.SessionImplementor 

class CustomIdGenerator implements IdentifierGenerator { 
    public synchronized Serializable generate(SessionImplementor session, Object obj) { 
     // here's where you would have to access some persistent store to 
     // remember your last generated ID, fetch the last value, add 5, 
     // and store that new value to be ready for the next call 
     // -- don't know what DBMS you intend to use, but some have 
     // sequence support that will let you tinker with the starting 
     // point and increment. Maybe it's a simple as setting up a 
     // customized sequence and asking for nextVal() 
     // 
     // for this example, I just use a random UUID 
     return UUID.randomUUID().toString() 
    } 
} 
関連する問題