2017-05-01 4 views
1

Je vais un peu fou essayer de comprendre cela, je suis sûr que la solution est simple, mais j'ai de la difficulté à visualiser ces relations de données. Alors, voici ce que je suis en train de faire:Silverstripe DataObject Relationships - deux has_many qui se rapportent les uns aux autres

J'ai un objet appelé « offre », qui a besoin de deux GridFields pour « ItineraryItem » et « ItineraryTab » Data Objects

C'est ce que j'ai à la minute les trois objets, mais il renvoie une erreur à chaque fois et je n'arrive pas à comprendre pourquoi. Comme je l'ai dit, la solution est probablement assez simple, mais je ne peux plus la voir après tant d'heures d'essai! Aidez-moi, s'il vous plaît!

Je suis d'exploitation sur Silverstripe 3.4, si cela aide

+0

Quelle est l'erreur que vous obtenez? – bummzack

+0

dans une page ajax obtenir l'offre, je reçois ceci: SELECT COUNT DISTINCT (DISTINCT "ItineraryItem" "ID".) AS "Count" DE "ItineraryItem" INNER JOIN "ItineraryTab_ItineraryItems" ON "ItineraryTab_ItineraryItems" "ItineraryItemID". = "ItineraryItem". "ID" LEFT JOIN "ItineraryTab" ON "ItineraryTab_ItineraryItems". "ItineraryTabID" = "ItineraryTab". "ID" OU ("OfferID" =?) ET ("ItineraryTab". "TabNo" =?) Colonne 'OfferID' dans laquelle la clause est ambiguë –

+0

Avez-vous vraiment besoin de lier l'offre aux éléments et aux onglets ainsi qu'aux éléments des onglets et vice versa? Je ne sais pas ce que ces modèles représentent, mais cela semble trop complexe. L'erreur survient parce que vous avez le même alias de relation dans deux endroits qui se réfèrent l'un à l'autre - corrigez en changeant 'Offer' à quelque chose d'autre comme' ItemOffer' ou quelque chose, mais cela ne veut pas nécessairement dire que vos relations sont correctement configurées . –

Répondre

0

, je devais répondre à moi-même, et a trouvé quelque chose qui fonctionne - mais je ne suis pas sûr qu'il est la bonne façon ou si elle est un hack. Ça y est quand même, au cas où ça aiderait quelqu'un.

Tout d'abord, j'ai dû entrer dans la base de données et supprimer la colonne OfferID de l'objet Tab. Si quelqu'un trouve quelque chose de plus élégant, s'il vous plaît faites le moi savoir, mais cela semble faire l'affaire pour l'instant.