MySQL: bir masada iki yabancı anahtarlar başka bir tabloya atıfta

3 Cevap php

Ben daha önce basit görünüyordu şey geldim ama beni tekrar başımı çizilmeye oldu. Ben kullanıcıları için bir tablo var:

user_id (PK) | username| email | something

... Ve bir kullanıcı başka bir kullanıcı inceledi zaman için "görünümler" için bir tablo:

view_id (PK) | viewer_id | viewed_id | view_date

"Viewer_id" ve "viewed_id" Bir kullanıcı izleyici veya incelenirken biri iken beni örnekleri için ayrı ayrı aramak için izin, hem user_ids vardır.

Ben başlangıçta bu sütunların her ikisi de yabancı anahtarlar olacağını düşündüm, ama benim schema.yml dosyasında tabloları oluşturulmuş olan (I Doktrini 1.2 kullanıyorum) ve iki ayrı dış ilişkileri (her sütun için bir) belirtilmiş, bu Doktrin sadece alır gibi görünüyor dikkate bu iki tablo arasındaki ilk listelenen yabancı ilişki (User_id> viewer_id).

Bu doğru bir davranış MySQL, Doktrini bir sorun, ya da ben bu ulaşıyorum bir şekilde bir sorun, ya da endişelenecek bir şey olup olmadığını şimdi bana karıştı var! Başka bir tablodaki aynı sütun eşleştirilir bir tablodan iki ayrı yabancı anahtarlar olabilir mi? Bu verilen, hatta mantıklı bir hala user_id aracılığıyla bana "views" erişim verecek JOIN? Yanlış var mı?

Zaman ayırdığınız için teşekkürler.

EDIT - The schema file:

User:
relations:
View: {class: View, local: user_id, foreign: viewer_id, type: many, foreignType: one, alias: View, foreignAlias: User}
View: {class: View, local: user_id, foreign: viewed_id, type: many, foreignType: one, alias: View, foreignAlias: User}

... only difference is viewer_id/viewed_id

3 Cevap

And here we go: You specified the same aliases for the relations.

User:
  relations:
    viewed_by: 
       class: View
       local: user_id
       foreign: viewed_id
       type: many
       foreignType: one
       foreignAlias: viewed

    viewed:
      class: View
      local: user_id
      foreign: viewer_id
      type: many
      foreignType: one
      foreignAlias: viewer

Yoksa farklı bütün çok-çok ilişki kurmak:

User:
   relations:
     viewed_by: 
       class: User 
       local: viewed_id
       foreign: viewer_id,
       refClass: View
     viewed:
       class: User
       local:viewer_id
       foreign: viewed_id
       refClass: View

ve View gibi görünmelidir

View:
  columns:
    viewed_id:
      type: integer
      primary: true
    viewer_id:
      type: integer
      primary: true

Üzerinde Doktrin belgelerine bakın many-to-many relationships.

MySQL hatta başka bir tablo aynı sütunda aynı tabloda birden fazla yabancı anahtarlar, verir, ancak doktrin sadece bunlardan birini oluşturur neden söyleyemem:

mysql> CREATE TABLE test1 (id INT);
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE test3 (ref1 INT, ref2 INT, FOREIGN KEY (ref1) REFERENCES test1(id), FOREIGN KEY (ref2) REFERENCES test1(id));
Query OK, 0 rows affected (0.01 sec)

tablo FR_PROJECT_REQUIREMENT (Istekkimliği varchar2 (20), ProjectID varchar2 (20), SkillID varchar2 (20) oluşturmak, NoOfFresherReq sayı, Durum varchar2 (10), kısıtlama birincil anahtar (Istekkimliği), kısıt check_status çek (durumu ('AÇIK' IN pk_requestid, Yabancı anahtar fk_projectid2)) 'KAPALI', kısıt (projectid) referanslar fr_project (projectid), yabancı anahtar (skillid) fk_skillid2 kısıt) FR_SKILLMASTER (skillid) başvurur;

Bu size yardımcı olabilir