Join table with vocabulary
Archived from the Xataface Users forum.
Gwynnbleid1 — Tue Nov 27, 2012 1:11 am
Hi there!
I have a strange problem. I have two three tables defined like this:
- Code: Select all
CREATE TABLE IF NOT EXISTS `komputery` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Oddzial` int(11) DEFAULT NULL, `Dzial` int(11) DEFAULT NULL, `Lokalizacja` int(11) DEFAULT NULL, `Typ` enum('Stacjonarny','Laptop') COLLATE utf8_polish_ci DEFAULT NULL, `Nazwa` varchar(45) COLLATE utf8_polish_ci DEFAULT NULL, `Model` varchar(45) COLLATE utf8_polish_ci DEFAULT NULL, `Procesor` varchar(45) COLLATE utf8_polish_ci DEFAULT NULL, `Ram` varchar(45) COLLATE utf8_polish_ci DEFAULT NULL, `Dysk` varchar(45) COLLATE utf8_polish_ci DEFAULT NULL, `Grafika` varchar(45) COLLATE utf8_polish_ci DEFAULT NULL, `Naped` varchar(45) COLLATE utf8_polish_ci DEFAULT NULL, `NumerInwentarzowy` varchar(45) COLLATE utf8_polish_ci DEFAULT NULL, `PN` varchar(45) COLLATE utf8_polish_ci DEFAULT NULL, `SN` varchar(45) COLLATE utf8_polish_ci DEFAULT NULL, `Dostawca` varchar(45) COLLATE utf8_polish_ci DEFAULT NULL, PRIMARY KEY (`Id`), KEY `fk_Komputery_Oddzial1_idx` (`Oddzial`), KEY `fk_Komputery_Dzial1_idx` (`Dzial`), KEY `fk_Komputery_Lokalizacja1_idx` (`Lokalizacja`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=3 ;- Code: Select all
- `` CREATE TABLE IF NOT EXISTS
komputery_oprogramowanie(
Idint(11) NOT NULL AUTO_INCREMENT,
KomputerIdint(11) DEFAULT NULL,
OprogramowanieIdint(11) DEFAULT NULL,
PRIMARY KEY (Id),
UNIQUE KEYOprogramowanieId(OprogramowanieId),
KEYfk_Komputery_Oprogramowanie_Komputery1_idx(KomputerId),
KEYfk_Komputery_Oprogramowanie_Oprogramowanie1_idx(OprogramowanieId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=3 ;–
– Ograniczenia dla zrzutów tabel
––
– Ograniczenia dla tabelikomputery_oprogramowanie
–
ALTER TABLEkomputery_oprogramowanie
ADD CONSTRAINTfk_Komputery_Oprogramowanie_Komputery1FOREIGN KEY (KomputerId) REFERENCESkomputery(Id) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD CONSTRAINTfk_Komputery_Oprogramowanie_Oprogramowanie1FOREIGN KEY (OprogramowanieId) REFERENCESoprogramowanie(Id) ON DELETE NO ACTION ON UPDATE NO ACTION; `` - Code: Select all
- `` CREATE TABLE IF NOT EXISTS
oprogramowanie(
Idint(11) NOT NULL AUTO_INCREMENT,
Nazwavarchar(45) COLLATE utf8_polish_ci DEFAULT NULL,
Rodzajint(11) DEFAULT NULL,
Typvarchar(45) COLLATE utf8_polish_ci DEFAULT NULL,
Bityvarchar(45) COLLATE utf8_polish_ci DEFAULT NULL,
Kluczvarchar(45) COLLATE utf8_polish_ci DEFAULT NULL,
Calvarchar(45) COLLATE utf8_polish_ci DEFAULT NULL,
PNvarchar(45) COLLATE utf8_polish_ci DEFAULT NULL,
PRIMARY KEY (Id),
KEYfk_Oprogramowanie_Oprogramowanie_Rodzaj1_idx(Rodzaj)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=3 ;–
– Ograniczenia dla zrzutów tabel
––
– Ograniczenia dla tabelioprogramowanie
–
ALTER TABLEoprogramowanie
ADD CONSTRAINTfk_Oprogramowanie_Oprogramowanie_Rodzaj1FOREIGN KEY (Rodzaj) REFERENCESoprogramowanie_rodzaj(Id) ON DELETE NO ACTION ON UPDATE NO ACTION; ``
Then in Komputery folder I have a relationship.ini file:
- Code: Select all
[Oprogramowanie] Komputery_Oprogramowanie.KomputerId="$Id" Komputery_Oprogramowanie.OprogramowanieId=Oprogramowanie.Id action:label="Oprogramowanie" vocabulary:existing="Komp_Opro"
And in Oprogramowanie folder i have a valuelist.ini file:
- Code: Select all
- `[Komputer]
sql = “SELECT Id,Nazwa from Komputery ORDER BY Nazwa”[Rodzaj]
sql = “select Id, Rodzaj from Oprogramowanie_Rodzaj”
[Komp_Opro]
sql = “SELECT a.Id,a.Nazwa from Oprogramowanie a WHERE (SELECT COUNT(‘x’) FROM Komputery_Oprogramowanie b WHERE a.Id=b.OprogramowanieId)=0 ORDER BY a.Nazwa”`
Vocabulary is designed in such a way to prevent from adding Oprogramowanie record to more than one Komputery record. All seems to work at first glance.
Problem is that although vocabulary returns correct data (lets say Oprogramowanie with id 2) it tries to add to komputery record a Oprogramowanie record with Id 1 which was previously inserted in another record. I looked into source of page and I can clearly see id 2 there. Why it tries to add id 1 instead.
shannah — Fri Nov 30, 2012 4:45 am
I haven’t had a chance to test this but have added an issue to the issue tracker.
http://bugs.weblite.ca/view.php?id=1195
Are you saying that the record that you select in the add existing record form is being ignored, and another record is added to the relationship instead?
Gwynnbleid1 — Fri Nov 30, 2012 6:35 am
Exactly.
Lets say I have:
Computer(Komputer) with id 1.
Software (Oprogramowanie) with name for ex. first and id 1
Software (Oprogramowanie) with name for ex. second and id 2
Nothing is added so far to Computer.
Valuelist shows both Software records and when I add software with id 1 to computer then all is fine.
When I try to add second software to computer then valuelist shows correctly list with only one existing software
with name second (which is correct). Also in source I can see that this reaming software has a id 2 (also correct).
But when I try to actually add it then nothing happens. Nothing new is added and software with id 2 is still available.
Funny thing is that I do get message that record is added successfully.
I hope that everything above is still clear
Regards and big thanks !!
Gwynnbleid1
shannah — Mon Dec 03, 2012 11:45 am
Yes. This definitely sounds like a bug. It is possible that it is tripping on the fact that the name of the id field is same for each table… but it *should* be able to still work despite that. I will need to test this out on my end, but don’t know when I’ll have a chance to do that.
Gwynnbleid1 — Mon Dec 03, 2012 12:29 pm
shannah wrote:Yes. This definitely sounds like a bug. It is possible that it is tripping on the fact that the name of the id field is same for each table… but it *should* be able to still work despite that. I will need to test this out on my end, but don’t know when I’ll have a chance to do that.
I will try with diffrent id then and post the results. Thanks for looking into this
Gwynnbleid1 — Mon Dec 03, 2012 3:18 pm
I just confirmed that problem lies(as you thought) in Id column names being identical. Changing those solved problem, but bug remains.
shannah — Mon Dec 03, 2012 3:59 pm
I forgot to ask. What version of Xataface are you using?
Gwynnbleid1 — Tue Dec 04, 2012 1:59 am
Xataface 2.0alpha1