• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przypisanie do tabeli images relacji many to one - bez klucza encji

Object Storage Arubacloud
+1 głos
88 wizyt
pytanie zadane 23 lutego 2023 w JavaScript przez rszczepanski02 Obywatel (1,180 p.)

Cześć,
Wiem, że temat tego posta niewiele mówi, ale postaram się tutaj przybliżyć temat.

Stworzyłem bardzo prostą tabelę, która z założenia ma przechowywać wszystkie zdjęcia z aplikacji. Zdjęcia te przypisywane są w różnych miejscach. Do momentu gdy wykorzystywałem tylko relację one to one, nie było problemu. NP. w tabeli place miałem właściwość place_profile, do której przypisywałem ID obiektu znajdującego się w tabeli images. Pojawił się jednak problem gdy chciałem dodać do tabeli place property images, która przechowywałaby wiele zdjęć (one to many), gdyż w tabeli images nie przechowuje klucza obiektu place.

Poniżej załączam kod:

ImageEntity:

@Entity({ name: 'images' })
class ImageEntity {
  @PrimaryGeneratedColumn()
  public id: number;

  @CreateDateColumn({ name: 'created_at' })
  public createdAt: Date;

  @Column({ name: 'file_key' })
  public fileKey: string;

  @Column({ name: 'file_type' })
  fileType: ImageFileType;
}

export default ImageEntity;


Urywek PlaceEntity:

  @OneToOne(() => ImageEntity, { cascade: true, nullable: true })
  @JoinColumn({ name: 'profile_img' })
  public profileImg: ImageEntity;

  @OneToOne(() => ImageEntity, { cascade: true, nullable: true })
  @JoinColumn({ name: 'banner_img' })
  public bannerImg: ImageEntity;

  // tutaj pojawia się problem
  @OneToMany(() => ImageEntity, (placeImages) => placeImages.id, {
    cascade: true,
    nullable: true
  })
  @JoinColumn({ name: 'images' })
  public images: ImageEntity[];

Ktoś ma może pomysł jak mógłbym rozwiązać ten problem?
Z góry bardzo dziękuję za pomoc!
 

1 odpowiedź

0 głosów
odpowiedź 23 lutego 2023 przez Wiciorny Ekspert (269,710 p.)
Problem, który opisujesz, wynika z faktu, że w relacji OneToMany wymagane jest użycie klucza obcego w tabeli ze zdjęciami, aby można było powiązać je z odpowiednim miejscem (tj. PlaceEntity w Twoim przypadku).
Bez klucza obcego nie będzie możliwe nawiązanie relacji. Generalnie istnieje szansa na wykorzystywanie w OneToOne relacji bez klucza g/obcego, ale to nie ma sensu, bo nie masz pojęcia do kogo nalezą te dane i o niczym Ci te dane same w sobie nie powiedzą, gorzej własnie w OneToMany.

Można by jakoś to rozwiązać,  np , dodając w tabeli images kolumnę przechowującą ID miejsca, z którego pochodzi zdjęcie. Wówczas relacja OneToMany między PlaceEntity a ImageEntity będzie możliwa.

A nie możesz jeszcze utworzyć osobnej tabeli jako przechowywanie tych wartości z jednym kluczem głównym ?
Istnieje coś takiego jak JoinTable, gdzie możesz dokonać złączeń wybranych kolumn.
Wtedy możesz spróbować złączyć 1 ID, z wartościami 2 innych kolumn jako JoinTable.

Podobne pytania

0 głosów
0 odpowiedzi 150 wizyt
pytanie zadane 26 grudnia 2020 w C# przez Szyszka Gaduła (3,490 p.)
0 głosów
1 odpowiedź 2,836 wizyt
0 głosów
1 odpowiedź 1,084 wizyt
pytanie zadane 29 listopada 2017 w SQL, bazy danych przez olszew6018 Nowicjusz (160 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...