Piotrek Kaźmierczak sky is the limit...
Temat: [Doctrine & MySQL] Relacja many-to-many psuje zapytanie SQL.
Witam,Stworzyłem poniższy schemat YAML (oprócz tego standardowy schemat sfGuard).
Artykul:
columns:
autor_id:
type: integer(4)
notnull: true
unsigned: true
edytor_id:
type: integer(4)
unsigned: true
tytul:
type: string(255)
notnull: true
opis:
type: clob
notnull: true
status:
type: enum
notnull: true
values: ['NADESŁANY', 'RECENZOWANY', 'ODRZUCONY', 'ZAAKCEPTOWANY', 'POPRAWIANY', 'PRZYDZIELONY']
default: NADESŁANY
indexes:
tytul:
fields: [tytul]
relations:
Autor:
class: sfGuardUser
foreignAlias: Artykuly
Edytor:
class: sfGuardUser
foreignAlias: ArtykulyPrzydzielone
Wspolautorzy:
class: sfGuardUser
refClass: Wspolautorzy
foreignAlias: Wspolautorzy
Publikacja:
local: id
foreign: artykul_id
Wspolautorzy:
columns:
artykul_id:
type: integer(4)
notnull: true
unsigned: true
primary: true
user_id:
type: integer(4)
notnull: true
unsigned: true
primary: true
relations:
Wspolautor:
class: sfGuardUser
onDelete: CASCADE
foreignAlias: Wspolautorzy
Artykul:
onDelete: CASCADE
foreignAlias: Wspolautorzy
Rewizja:
actAs:
Timestampable:
updated:
disabled: true
columns:
nr:
type: integer(1)
notnull: true
unsigned: true
default: 1
artykul_id:
type: integer(4)
notnull: true
unsigned: true
relations:
Artykul:
foreignAlias: Rewizje
Recenzenci:
class: sfGuardUser
refClass: RecenzenciRewizji
foreignAlias: RecenzowaneRewizje
RecenzenciRewizji:
columns:
rewizja_id:
type: integer(4)
notnull: true
unsigned: true
primary: true
user_id:
type: integer(4)
notnull: true
unsigned: true
primary: true
relations:
Rewizja:
onDelete: CASCADE
foreignAlias: RecenzenciRewizji
Recenzent:
class: sfGuardUser
onDelete: CASCADE
foreignAlias: RecenzenciRewizji
Publikacja:
columns:
artykul_id:
type: integer(4)
notnull: true
unsigned: true
ocena:
type: float
notnull: true
unsigned: true
default: 1
checks:
ocena_min: ocena >= 1
ocena_max: ocena <= 10
relations:
Artykul:
foreignType: one
Recenzja:
columns:
recenzent_id:
type: integer(4)
unsigned: true
notnull: true
rewizja_id:
type: integer(4)
unsigned: true
notnull: true
tresc:
type: clob
notnull: true
tresc_dla_edytora:
type: clob
ocena:
type: integer(1)
unsigned: true
notnull: true
default: 1
jakosc:
type: integer(1)
unsigned: true
notnull: true
default: 1
jezyk:
type: enum
notnull: true
values: ['prosty', 'w miarę prosty', 'trudny', 'bardzo trudny', 'nic nie da się zrozumieć']
default: prosty
stopien_trudnosci:
type: enum
notnull: true
values: ['początkujący', 'średnio zaawansowany', 'zaawansowany', 'ekspert']
default: początkujący
status:
type: enum
notnull: true
values: ['NIEROZPOCZĘTA', 'ROZPOCZĘTA', 'WYSŁANA', 'ODRZUCONA']
default: NIEROZPOCZĘTA
checks:
jakosc_min: jakosc >= 1
jakosc_max: jakosc <= 10
ocena_min: ocena >= 1
ocena_max: ocena <= 10
relations:
Recenzent:
class: sfGuardUser
foreignAlias: Recenzje
Rewizja:
foreignAlias: Recenzje
Plik:
options:
symfony:
form: false
filter: false
columns:
rewizja_id:
type: int(4)
notnull: true
unsigned: true
plik:
type: blob
notnull: true
WiarygodnoscCzytelnika:
options:
symfony:
form: false
filter: false
columns:
user_id:
type: integer(4)
notnull: true
unsigned: true
wiarygodnosc:
type: float
notnull: true
unsigned: true
default: 0
ZainteresowaniaCzytelnika:
options:
symfony:
form: false
filter: false
columns:
user_id:
type: integer(4)
notnull: true
unsigned: true
primary: true
zainteresowanie_id:
type: integer(4)
notnull: true
unsigned: true
primary: true
relations:
Czytelnik:
class: sfGuardUser
onDelete: CASCADE
foreignAlias: ZainteresowaniaCzytelnika
Zainteresowanie:
class: Dziedzina
onDelete: CASCADE
foreignAlias: ZainteresowaniaCzytelnika
Dziedzina:
options:
symfony:
filter: false
columns:
nazwa:
type: string(255)
notnull: true
unique: true
relations:
Zainteresowania:
class: sfGuardUser
refClass: ZainteresowaniaCzytelnika
foreignAlias: Zainteresowania
Specjalnosci:
class: sfGuardUser
refClass: SpecjalnosciAutora
foreignAlias: Specjalnosci
Tematyka:
class: Artykul
refClass: TematykaArtykulu
foreignAlias: Tematyka
SpecjalnosciAutora:
options:
symfony:
form: false
filter: false
columns:
user_id:
type: integer(4)
notnull: true
unsigned: true
primary: true
specjalnosc_id:
type: integer(4)
notnull: true
unsigned: true
primary: true
relations:
Autor:
class: sfGuardUser
onDelete: CASCADE
foreignAlias: SpecjalnosciAutora
Specjalnosc:
class: Dziedzina
onDelete: CASCADE
foreignAlias: SpecjalnosciAutora
RangaAutora:
options:
symfony:
form: false
filter: false
columns:
user_id:
type: integer(4)
notnull: true
unsigned: true
ranga:
type: float
notnull: true
unsigned: true
default: 0
TematykaArtykulu:
options:
symfony:
form: false
filter: false
columns:
artykul_id:
type: integer(4)
notnull: true
unsigned: true
primary: true
tematyka_id:
type: integer(4)
notnull: true
unsigned: true
primary: true
relations:
Artykul:
onDelete: CASCADE
foreignAlias: TematykaArtykulu
Tematyka:
class: Dziedzina
onDelete: CASCADE
foreignAlias: TematykaArtykulu
Przy doctrine:build --all, wyrzuca mi błąd podczas wrzucania kodu sql:
SQLSTATE[42000]: Syntax error or access violation: 1072 Key column 'sf_guard_user_id' doesn't exist in table. Failing Query: "CREATE TABLE artykul (id BIGINT AUTO_INCREMENT, autor_id INT UNSIGNED NOT NULL, edytor_id INT UNSIGNED, tytul VARCHAR(255) NOT NULL, opis LONGTEXT NOT NULL, status VARCHAR(255) DEFAULT 'NADES�ANY' NOT NULL, INDEX tytul_idx (tytul), INDEX sf_guard_user_id_idx (sf_guard_user_id), PRIMARY KEY(id)) ENGINE = INNODB". Failing Query: CREATE TABLE artykul (id BIGINT AUTO_INCREMENT, autor_id INT UNSIGNED NOT NULL, edytor_id INT UNSIGNED, tytul VARCHAR(255) NOT NULL, opis LONGTEXT NOT NULL, status VARCHAR(255) DEFAULT 'NADES�ANY' NOT NULL, INDEX tytul_idx (tytul), INDEX sf_guard_user_id_idx (sf_guard_user_id), PRIMARY KEY(id)) ENGINE = INNODB
Nie wiem zbytnio jak sobie poradzić. Symfony już nieco poznałem i zdążyłem się zorientować, że nauczenie symfony to nie problem... trzeba dobrze poznać Doctrine.
Nie wszystko jest jeszcze dla mnie jasne, nie wiem czy dobrze implementuje relacje w YAMLu. Jadę głównie z manuala, przeglądałem jakieś inne fora każdy chyba inaczej robi te relacje ^^. Czy wszystko to co wpisuje jest konieczne, lub czy czegoś nie pomijam?
Gdzie tkwi mój błąd?
Pozdrawiam,
PKPiotrek Kaźmierczak edytował(a) ten post dnia 07.01.11 o godzinie 00:28