2011-07-21 12 views
0

私のスキーマ内の単一のテーブルを使用して埋め込みフォームを動的に追加しようとしています。フォームを動的に埋め込む

、私は動的に追加しようとしていますどのような私は、このことにより、意味、私の sfGuardUserProfile表に、私は、ユーザーが何であるかを決定するために、多数のフィールドを持っている、すなわちpractice_id、nurse_id、このことを念頭に置いて、だから、

をpatient_id

看護師は慣習に従う。

私はsfGuardUserを拡張sfGuardUserAdminFormを拡張練習フォームを、持っている、これは私は、ユーザー名、sfGuardUserテーブルに格納されたパスワードなどを取得することができます。

私のpracticeFormには、sfGuardUserProfileテーブルから必要なフィールドを表示するpracticeProfileformが埋め込まれています。私は誰もが従っていることを願って...

これはうまく動作し、両方のテーブルのフィールドが表示されます。

今、私は今、看護師を埋め込む方法がわかりません。私は、実践と看護師が同じテーブルに救われるため、これをどうやって行うのかが特に不明です。

practiceForm

class Practiceform extends sfGuardUserAdminForm 
{ 
    public function configure() 
    { 
     $form = new PracticeProfileForm($this->getObject()->getProfile()); 
     $this->embedForm('profile', $form); 
    } 
} 

私はまた再びsfGuardUserを拡張nurseFormを持って、私は必要なフィールドを取得するためにsfGuardUserProfileを拡張nurseProfileFormを埋め込みます。

nurseForm

class dentistForm extends sfGuardUserAdminForm 
{ 
    public function configure() 
    { 
     $profileForm = new nurseProfileForm($this->object->Profile); 
     $this->embedForm('profile', $profileForm); 

{ 

}

次のように私のschema.ymlのは、次のとおりです。

sfGuardUserProfile: 
    actAs: 
    Timestampable: ~ 
    columns: 
    user_id: 
     type: integer(11) 
     notnull: true 
     default: 
     unsigned: false 
     primary: false 
     unique: false 
     autoincrement: false 
    email_new: 
     type: string(255) 
     unique: true 
    firstname: 
     type: string(255) 
    lastname: 
     type: string(255) 
    practice_id: 
     type: integer(11) 
    nurse_name: 
     type: varchar(255) 
    practice_name: 
     type: varchar(255) 
    practice_type: 
     type: varchar(255) 
    validate_at: 
     type: timestamp 
    validate: 
     type: string(33) 
    relations: 
    User: 
     class: sfGuardUser 
     foreign: id 
     local: user_id 
     type: one 
     onDelete: cascade 
     foreignType: one 
     foreignAlias: Profile 
    Practice: 
     class: sfGuardUserProfile 
     foreign: id 
     local: practice_id 
     type: one 
     onDelete: cascade 
    indexes: 
    validate: 
     fields: [validate] 

は、私は現在、スキーマ/フォームで動的にこれらの看護師を加える達成するための簡単な方法はありますDoctrine/SF1.4を使用していますか?

Manayおかげ

答えて

0

は、私は非常に最初のスキーマを再考することをお勧め。すべてのエンティティを1つのテーブルに格納する必要がありますか?

代わりに、sfGuardUserに関連する特定のフィールドを持つ異なるエンティティ(クラス)を使用してください。その後

Nurse: 
    columns: 
    account_id: integer(4) 
    name: string(255) 
    ... 
    relations: 
    Account: 
     class: sfGuardUser 
     local: account_id 
     foreign: id 
     type: one 
     foreignType: one 

、あなたはsfGuardUserFormにおける看護師の関係を埋め込むことができます:たとえば

class sfGuardUserForm 
{ 
    public function configure() 
    { 
     $this->embedRelation('Nurse'); 
    } 
} 

あるいは、他の方法で回避:

class NurseForm 
{ 
    public function configure() 
    { 
     $this->embedRelation('Account'); 
    } 
} 

、他のすべてのために同じことを行いますエンティティ。しかし、あなたの気持ちがほぼ同じであると感じる場合は、通常は悩まされますが、教義の継承を見ることができます。

関連する問題