Я унаследовал разработку приложения Symfony 1.4 (хотя это мой первый проект Symfony).
После того, как я немного покопался в этом приложении, я обнаружил ошибку, которая сводит меня с ума.
На странице списка администратора генератора модуля есть два поля выбора в форме фильтра, которыеследует перечислить каждого типа пользователей (партнеров и клиентов), однако в обоих списках отображаются все пользователи.
* generator.yml
показывает, что оба поля выбора должны быть заполнены parter_id
и client_id
[...]
filter:
display: [date, client_id, partner_id, ...]
form: ~
edit: ~
new: ~
[...]
Глядя на схему модуля очевидно почему symfony заполняет поля select одинаковым содержимым, потому что отношения 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';
Я искал способеДит схему модуля, чтобы отразить связь между client_id
и partner_id
с их именем группы, чтобы получить правильные поля выбора формы фильтра, но я перестал верить, что это неправильный подход
¿Можно ли изменить схему модуля, чтобы позволить Symfony правильно заполнять поля выбора?
¿или этот подход совершенно неправильный, и вместо этого я должен взломать методы, которые визуализируют эти поля, чтобы заполнить их правильными запросами?Если это так, намеки в этом направлении будут оценены.
Спасибо