Kod
propel:
_attributes: { package: plugins.sfGuardPlugin.lib.model }
sf_guard_group:
_attributes: { phpName: sfGuardGroup }
id: ~
name: { type: varchar, size: 255, required: true, index: unique }
description: { type: longvarchar }
sf_guard_permission:
_attributes: { phpName: sfGuardPermission }
id: ~
name: { type: varchar, size: 255, required: true, index: unique }
description: { type: longvarchar }
sf_guard_group_permission:
_attributes: { phpName: sfGuardGroupPermission }
group_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_group, foreignReference: id, onDelete: cascade }
permission_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_permission, foreignReference: id, onDelete: cascade }
sf_guard_user:
_attributes: { phpName: sfGuardUser }
id: ~
username: { type: varchar, size: 128, required: true, index: unique }
algorithm: { type: varchar, size: 128, required: true, default: sha1 }
salt: { type: varchar, size: 128, required: true }
password: { type: varchar, size: 128, required: true }
created_at: ~
last_login: { type: timestamp }
is_active: { type: boolean, required: true, default: 1 }
is_super_admin: { type: boolean, required: true, default: 0 }
sf_guard_user_permission:
_attributes: { phpName: sfGuardUserPermission }
user_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_user, foreignReference: id, onDelete: cascade }
permission_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_permission, foreignReference: id, onDelete: cascade }
sf_guard_user_group:
_attributes: { phpName: sfGuardUserGroup }
user_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_user, foreignReference: id, onDelete: cascade }
group_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_group, foreignReference: id, onDelete: cascade }
sf_guard_remember_key:
_attributes: { phpName: sfGuardRememberKey }
user_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_user, foreignReference: id, onDelete: cascade }
remember_key: { type: varchar, size: 32 }
ip_address: { type: varchar, size: 50, primaryKey: true }
created_at: ~
_attributes: { package: plugins.sfGuardPlugin.lib.model }
sf_guard_group:
_attributes: { phpName: sfGuardGroup }
id: ~
name: { type: varchar, size: 255, required: true, index: unique }
description: { type: longvarchar }
sf_guard_permission:
_attributes: { phpName: sfGuardPermission }
id: ~
name: { type: varchar, size: 255, required: true, index: unique }
description: { type: longvarchar }
sf_guard_group_permission:
_attributes: { phpName: sfGuardGroupPermission }
group_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_group, foreignReference: id, onDelete: cascade }
permission_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_permission, foreignReference: id, onDelete: cascade }
sf_guard_user:
_attributes: { phpName: sfGuardUser }
id: ~
username: { type: varchar, size: 128, required: true, index: unique }
algorithm: { type: varchar, size: 128, required: true, default: sha1 }
salt: { type: varchar, size: 128, required: true }
password: { type: varchar, size: 128, required: true }
created_at: ~
last_login: { type: timestamp }
is_active: { type: boolean, required: true, default: 1 }
is_super_admin: { type: boolean, required: true, default: 0 }
sf_guard_user_permission:
_attributes: { phpName: sfGuardUserPermission }
user_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_user, foreignReference: id, onDelete: cascade }
permission_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_permission, foreignReference: id, onDelete: cascade }
sf_guard_user_group:
_attributes: { phpName: sfGuardUserGroup }
user_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_user, foreignReference: id, onDelete: cascade }
group_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_group, foreignReference: id, onDelete: cascade }
sf_guard_remember_key:
_attributes: { phpName: sfGuardRememberKey }
user_id: { type: integer, primaryKey: true, required: true, foreignTable: sf_guard_user, foreignReference: id, onDelete: cascade }
remember_key: { type: varchar, size: 32 }
ip_address: { type: varchar, size: 50, primaryKey: true }
created_at: ~
Ja natomiast chciałbym utworzyć tabelę profil z kluczem głównym profil_id oraz kluczem obcym do tablicy sf_guard_user. Mój plik schema.yml jest następujący:
Kod
propel:
Profil:
profil_id: { type: integer, poreignKey: true, autoincrement: true }
imie: { type: varchar(45), required: true }
nazwisko: { type: varchar(128), required: true }
email: { type: varchar(45), index: unique, required: true }
miejscowosc: { type: varchar(60) }
data_urodzenia: { type: date }
plec: { type: varchar(10) }
telefon: { type: integer }
id: ~
_foreignKeys:
-
foreignTable: sf_guard_user
onDelete: cascade
onUpdate: cascade
references:
- { local: id, foreign: id }
Profil:
profil_id: { type: integer, poreignKey: true, autoincrement: true }
imie: { type: varchar(45), required: true }
nazwisko: { type: varchar(128), required: true }
email: { type: varchar(45), index: unique, required: true }
miejscowosc: { type: varchar(60) }
data_urodzenia: { type: date }
plec: { type: varchar(10) }
telefon: { type: integer }
id: ~
_foreignKeys:
-
foreignTable: sf_guard_user
onDelete: cascade
onUpdate: cascade
references:
- { local: id, foreign: id }
No i tutaj pojawia się problem. Niestety nie chcę mnie przepuścić. Błąd jest następujący:
Cytat
[propel-sql-exec] Failed to execute:
CREATE TABLE `Profil`
(
`profil_id` INTEGER AUTO_INCREMENT,
`imie` VARCHAR(45) NOT NULL,
`nazwisko` VARCHAR(128) NOT NULL,
`email` VARCHAR(45) NOT NULL,
`miejscowosc` VARCHAR(60),
`data_urodzenia` DATE,
`plec` VARCHAR(10),
`telefon` INTEGER,
`id` INTEGER NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
UNIQUE KEY `Profil_U_1` (`email`),
CONSTRAINT `Profil_FK_1`
FOREIGN KEY (`id`)
REFERENCES `sf_guard_user` (`id`)
ON UPDATE CASCADE
ON DELETE CASCADE
)Type=InnoDB
Some problems occurred when executing the task:
If the exception message is not clear enough, read the output of the task for
more information
[propel-sql-exec] SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key
CREATE TABLE `Profil`
(
`profil_id` INTEGER AUTO_INCREMENT,
`imie` VARCHAR(45) NOT NULL,
`nazwisko` VARCHAR(128) NOT NULL,
`email` VARCHAR(45) NOT NULL,
`miejscowosc` VARCHAR(60),
`data_urodzenia` DATE,
`plec` VARCHAR(10),
`telefon` INTEGER,
`id` INTEGER NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
UNIQUE KEY `Profil_U_1` (`email`),
CONSTRAINT `Profil_FK_1`
FOREIGN KEY (`id`)
REFERENCES `sf_guard_user` (`id`)
ON UPDATE CASCADE
ON DELETE CASCADE
)Type=InnoDB
Some problems occurred when executing the task:
If the exception message is not clear enough, read the output of the task for
more information
[propel-sql-exec] SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key
Gdy wykasuję kolumnę profil_id wszystko pójdzie dobrze ale nie będę miał klucza głównego... (wiem, że chodzi o autoincrementację). Czy ktoś mógłby pomóc mi rozwiązać ten problem aby istniał i klucz główny i obcy? Zrobiłem jeden schemat, który wydawał mi się słuszny i klucze zostały utworzone ale niestety obcy nie był wpisywany. Natomiast gdy usunę klucz główny z tabeli profil, to klucz obcy normalnie się zapisuje... Czy istnieje sposób na to, żeby nie musieć w akcji pobierać rekordu, który właśnie wstawię do bazy w celu pobrania id z tabeli sf_guard_user i wstania go do tabeli profil na piechotę?