Symfony1 基于架构填充symfony管理生成器的选择字段

Symfony1 基于架构填充symfony管理生成器的选择字段,symfony1,doctrine,symfony-1.4,Symfony1,Doctrine,Symfony 1.4,我继承了symfony 1.4应用程序的开发,尽管这是我的第一个symfony项目 在那个应用程序上挖掘了一点之后,我发现了一个让我发疯的bug 在模块的“管理生成器列表”页面上,筛选表单中有两个选择字段,每个字段应列出一种类型的用户、合作伙伴和客户端,但这两个列表都显示所有用户 generator.yml显示两个select字段都应该由parter_id和client_id填充 从模块的模式来看,很明显为什么symfony会用相同的内容填充select字段,因为客户端id和合作伙伴id的关系是

我继承了symfony 1.4应用程序的开发,尽管这是我的第一个symfony项目

在那个应用程序上挖掘了一点之后,我发现了一个让我发疯的bug

在模块的“管理生成器列表”页面上,筛选表单中有两个选择字段,每个字段应列出一种类型的用户、合作伙伴和客户端,但这两个列表都显示所有用户

generator.yml显示两个select字段都应该由parter_id和client_id填充

从模块的模式来看,很明显为什么symfony会用相同的内容填充select字段,因为客户端id和合作伙伴id的关系是等效的:

SomeModule:
  tableName: client_requests
  columns:
    id: {type: integer, primary: true, autoincrement: true}
    partner_id: {type: integer, notnull: true}
    client_id: {type: integer, notnull: true}
    date: {type: timestamp}
    ...
  relations:
    partner:
      class: sfGuardUser
      local: partner_id
      foreign: id
      type: one
    client:
      class: sfGuardUser
      local: client_id
      foreign: id
      type: one
根据上述模式,symfony别无选择,只能生成以下选择字段:

select * from sf_guard_user; 
合作伙伴和客户之间的差异由sfGuardGroup和sfGuardUserGroup决定,来自./plugins/sfDoctrineGuardPlugin/config/doctor/schema.yml的架构的相关部分包括:

我想使用以下查询生成这些字段:

select u.*
from sf_guard_user as u
JOIN (sf_guard_user_group as ug JOIN sf_guard_group as g 
ON (ug.group_id = g.id)) ON (u.id = ug.user_id)
where g.name = 'partner';
我已经研究了一种方法来编辑模块的模式,以反映客户id和合作伙伴id与其组名之间的关系,从而获得正确的筛选表单选择字段,但我最终认为这是一种错误的方法

?是否可以修改模块的模式以允许symfony正确填充选择字段

或者这种方法是完全错误的,我应该破解呈现这些字段的方法,用正确的查询填充它们?如果是这样的话,我们将不胜感激


谢谢

只需编辑您的表单并将查询添加到partner_id小部件。比如:

$query = Doctrine::getTable('sfGuardUser')->createQuery('u')->etc etc...
$this->widgetSchema['partner_id']->setOption('query', $query)
您可能需要对该字段的验证器执行相同的操作:

$this->validatorSchema['partner_id']->setOption('query', $query)
如果您无法编辑该特定表单,则可能该表单已用于应用程序的其他部分,只需创建一个新表单来扩展它即可。然后,您只需要在generator.yml文件中指定form类

$query = Doctrine::getTable('sfGuardUser')->createQuery('u')->etc etc...
$this->widgetSchema['partner_id']->setOption('query', $query)
$this->validatorSchema['partner_id']->setOption('query', $query)