• 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

Cloud VPS
+1 głos
187 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 (281,530 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
1 odpowiedź 113 wizyt
0 głosów
0 odpowiedzi 203 wizyt
pytanie zadane 26 grudnia 2020 w C# przez Szyszka Gaduła (3,510 p.)
0 głosów
1 odpowiedź 3,182 wizyt

93,487 zapytań

142,423 odpowiedzi

322,773 komentarzy

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

Kursy INF.02 i INF.03
...