sequelize - include model where id: parent column json array [0]
-
מקרה קצת מסובך בsequelize
אשמח לעזרה.
יש מודל A שמכיל עמודה מסוג json בשם 'list' שמכיל מערך של id של מודל B.
אני מנסה לכתוב שאילתה שיביא לי מודל A אינכלוד מודל B שid שלו שווה ל [0]list של מודל A.
איך כותבים את זה?? -
@meir-lamdan
לפני שעושים include צריך להגדיר association, אני לא חושב שיש אפשרות להגדיר association לפי מערך שנמצא בתוך שדה JSONיש דיבורים פה על מימוש הפיצ'ר במערך של מזהים אבל מערך נייטיב של פוסטגרס, גם את זה לא מימשו, אני לא רואה מצב שיממשו את זה על מערך בתוך שדה json. (יש להם משום מה התנגדות עקרונית על אפשרות חיבור טבלאות בצורה שאי אפשר לעשות foreign key constraint)
-
@yossiz כתב בsequelize - include model where id: parent column json array [0]:
לפני שעושים include צריך להגדיר association, אני לא חושב שיש אפשרות להגדיר association לפי מערך שנמצא בתוך שדה JSON
כנראה לא הייתי מספיק ברור
אכתוב יותר מפורט את המקרהיש לי 2 מודלים
מודל בשם project ומודל בשם image
לכל פרויקט יכול להיות הרבה תמונות
כל תמונה יש לה גם עמודה של projectId כך שאפשר לבקש פרויקט מסוים עם כל התמונות שלו
למודל project יש עמודה נוספת בשם 'list' שמכיל מערך של id של תמונות מסוימות
אני מנסה לכתוב שאילתה להביא פרויקט מסוים עם include של התמונות שלו אבל רק תמונה שהid שלה שווה לערך הראשון במערך של העמודה של ה'list'איך כותבים את זה??
-
@meir-lamdan לא יודע לעזור לך, רק מכוון, אתה צריך להיות בטוח שזה בכלל אפשרי בשאילתת SQL RAW לפני שאתה מחפש איך עושים את זה בסקוולייז.
בגדול מה שידוע לי בשביל כזה דבר לא עושים מערך של ID אלא מחזיקים טבלה נפרדת של many to many -
@יוסף-בן-שמעון כתב בsequelize - include model where id: parent column json array [0]:
many to many
כל תמונה שייכת רק לפרויקט אחד, לכל פרויקט יש הרבה תמונות
-
@meir-lamdan עכשיו הרבה יותר ברור.
אז קודם כל אפשר לעשותwhere
עלinclude
עכשיו נשאר רק השאלה איך עושים ב-where
תנאי שמתנה שזה שווה לערך הראשון של מערך JSON.אני לא חושב שיש ב-sequelize תחביר מובנה לזה, אז תשתמש ב-SQL,
נראה לי משהו כזה:Model.findAll({ include: { model: ModelB, where: sequelize.literal('model_a->list->>0 = model_b.id') } })