• 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

VPS Starter Arubacloud
+1 głos
100 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 (277,600 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 166 wizyt
pytanie zadane 26 grudnia 2020 w C# przez Szyszka Gaduła (3,510 p.)
0 głosów
1 odpowiedź 3,049 wizyt
0 głosów
1 odpowiedź 1,148 wizyt
pytanie zadane 29 listopada 2017 w SQL, bazy danych przez olszew6018 Nowicjusz (160 p.)

93,025 zapytań

141,990 odpowiedzi

321,293 komentarzy

62,374 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...