我已经继承了symfony 1.4应用程序的开发(尽管这是我的第一个symfony项目)。根据模式填充symfony管理生成器的选择字段
在挖掘了那个应用程序后,我发现了一个让我疯狂的bug。
在模块的管理生成器列表页面上,筛选器表单中有两个选择字段,应该列出每种类型的用户(合作伙伴和客户端),但是这两个列表都会显示所有用户。
的generator.yml
表明,无论选择字段应该由parter_id
和client_id
[...]
filter:
display: [date, client_id, partner_id, ...]
form: ~
edit: ~
new: ~
[...]
望着模块的架构来填充很明显为什么symfony的是相同的内容,因为关系填充选择字段的client_id和partner_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/doctrine/schema.yml
架构的相关部分是:
sfGuardGroup:
actAs: [Timestampable]
columns:
name:
type: string(255)
unique: true
description: string(1000)
relations:
Users:
class: sfGuardUser
refClass: sfGuardUserGroup
local: group_id
foreign: user_id
foreignAlias: Groups
...
sfGuardUser:
actAs: [Timestampable]
columns:
first_name: string(255)
last_name: string(255
...
relations:
Groups:
class: sfGuardGroup
local: user_id
foreign: group_id
refClass: sfGuardUserGroup
foreignAlias: Users
Permissions:
class: sfGuardPermission
local: user_id
foreign: permission_id
refClass: sfGuardUserPermission
foreignAlias: Users
...
我想是使用如下查询生成这些字段:
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';
我研究了一种编辑模块的Sche马以反映client_id
和partner_id
与他们的组名之间的关系,以获得滤波器形式选择字段的权利,但我已经结束认为这是一个错误的做法
¿是否有可能修改模块的架构允许的symfony正确填充选择字段?
¿或者那种方法是完全错误的,我应该破解那些渲染这些字段来填充正确查询的方法?如果这样的暗示,将不胜感激。
感谢