我正在尝试使用我的架构中的单个表动态添加嵌入表单。
我的意思是,在我的sfGuardUserProfile
表中,我有很多字段来确定用户是什么,即practice_id,nurse_id,patient_id
因此,考虑到这一点,我正在尝试动态地将护士添加到实践中。
我有一个练习表单,扩展sfGuardUserAdminForm
,扩展sfGuardUser
,这样我就可以获得存储在sfGuardUser
表中的用户名,密码等。
在我的practiceForm
中,我嵌入了practiceProfileform
,它显示了sfGuardUserProfile
表中我需要的字段。我希望每个人都关注......
这很好用,我看到两个表中的字段。
现在,我现在不知道该怎么办:嵌入护士。我特别不确定如何做到这一点,因为练习和护士要保存在同一张桌子里。
practiceForm
class Practiceform extends sfGuardUserAdminForm
{
public function configure()
{
$form = new PracticeProfileForm($this->getObject()->getProfile());
$this->embedForm('profile', $form);
}
}
我还有一个护士形式,再次扩展sfGuardUser
,嵌入一个nurseProfileForm,扩展sfGuardUserProfile
以获取我需要的字段。
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 :(得分:0)
我强烈建议您首先重新考虑您的架构。你真的需要将所有实体存储在一个表中吗?
相反,让不同的实体(类)具有与sfGuardUser相关的特定字段。例如:
Nurse:
columns:
account_id: integer(4)
name: string(255)
...
relations:
Account:
class: sfGuardUser
local: account_id
foreign: id
type: one
foreignType: one
然后,您可以在您的sfGuardUserForm中嵌入Nurse关系:
class sfGuardUserForm
{
public function configure()
{
$this->embedRelation('Nurse');
}
}
或者,反过来说:
class NurseForm
{
public function configure()
{
$this->embedRelation('Account');
}
}
对所有其他实体也这样做。但是,如果你觉得你的恩赐几乎一样,你可以看看Doctrine的继承,虽然它通常不受欢迎。