Chciałbym zrobić relację wiele do wielu (role ACL do userów), z tym że przyjęty przeze mnie schemat nazewnictwa pól w klasach wyklucza użycie automatycznego detekcji relacji, przez co wysypuje mi się generowanie modeli z Doctrine'a.
Mój schemat yml:
CODE
### Main user object
Profile_User:
columns:
id: { type: integer(8), primary: true, autoincrement: true }
screenName: { type: string(64) }
mail: { type: string(128) }
password: { type: string(20) }
active: { type: boolean }
indexes:
uniquescreenname: { fields: [screenName], type: unique }
uniquemail: { fields: [mail], type: unique }
attributes:
export: all
validate: true
options:
type: INNODB
collate: utf8_polish_ci
charset: utf8
Profile_AclRole:
columns:
id: { type: integer(8), primary: true, autoincrement: true }
name: { type: integer(8) }
relations:
users: { class: Profile_User, foreignAlias: roles, refClass: Profile_AclUsersRoles, local: id, foreign: roleId }
options:
type: INNODB
collate: utf8_polish_ci
charset: utf8
Profile_AclUsersRoles:
columns:
roleId: { type: integer(8), primary: true }
userId: { type: integer(8), primary: true }
relations:
Profile_User: { foreignAlias: Profile_AclUsersRoles, local: userid }
Profile_AclRole: { foreignAlias: Profile_AclUsersRoles, local: roleid }
options:
type: INNODB
collate: utf8_polish_ci
charset: utf8
Profile_AclResource:
columns:
id: { type: integer(8), primary: true, autoincrement: true }
aclRole: { type: integer(8) }
resource: { type: string(64) }
action: { type: string(32) }
allow: { type: boolean }
relations:
role: { class: Profile_AclRole, foreignAlias: resources, local: aclRole, foreign: id }
options:
type: INNODB
collate: utf8_polish_ci
charset: utf8
Profile_User:
columns:
id: { type: integer(8), primary: true, autoincrement: true }
screenName: { type: string(64) }
mail: { type: string(128) }
password: { type: string(20) }
active: { type: boolean }
indexes:
uniquescreenname: { fields: [screenName], type: unique }
uniquemail: { fields: [mail], type: unique }
attributes:
export: all
validate: true
options:
type: INNODB
collate: utf8_polish_ci
charset: utf8
Profile_AclRole:
columns:
id: { type: integer(8), primary: true, autoincrement: true }
name: { type: integer(8) }
relations:
users: { class: Profile_User, foreignAlias: roles, refClass: Profile_AclUsersRoles, local: id, foreign: roleId }
options:
type: INNODB
collate: utf8_polish_ci
charset: utf8
Profile_AclUsersRoles:
columns:
roleId: { type: integer(8), primary: true }
userId: { type: integer(8), primary: true }
relations:
Profile_User: { foreignAlias: Profile_AclUsersRoles, local: userid }
Profile_AclRole: { foreignAlias: Profile_AclUsersRoles, local: roleid }
options:
type: INNODB
collate: utf8_polish_ci
charset: utf8
Profile_AclResource:
columns:
id: { type: integer(8), primary: true, autoincrement: true }
aclRole: { type: integer(8) }
resource: { type: string(64) }
action: { type: string(32) }
allow: { type: boolean }
relations:
role: { class: Profile_AclRole, foreignAlias: resources, local: aclRole, foreign: id }
options:
type: INNODB
collate: utf8_polish_ci
charset: utf8
jak ktoś ma pomysł będę widzięczny, pewnie wystarczy dopisać pewien klucz określający w relacji w AclRole.
Taki błąd wyrzuca przy generowaniu tabelek:
CODE
SQLSTATE[HY000]: General error: 1005 Can't create table 'motomysz.#sql-a58_5e' (
errno: 121). Failing Query: ALTER TABLE profile__acl_resource ADD CONSTRAINT pro
file__acl_resource_aclrole_profile__acl_role_id FOREIGN KEY (aclrole) REFERENCES
profile__acl_role(id)
errno: 121). Failing Query: ALTER TABLE profile__acl_resource ADD CONSTRAINT pro
file__acl_resource_aclrole_profile__acl_role_id FOREIGN KEY (aclrole) REFERENCES
profile__acl_role(id)
UPDATE: Wystarczy postawić bazę od nowa, wtedy zadziała.