Tom*_*Tom 2 php mysql schema doctrine foreign-keys
我之前遇到过一些看起来很简单的东西,但让我再次摸不着头脑.我有一个用户表:
user_id (PK) | username| email | something
Run Code Online (Sandbox Code Playgroud)
...以及当一个用户查看另一个用户时"视图"的表格:
view_id (PK) | viewer_id | viewed_id | view_date
Run Code Online (Sandbox Code Playgroud)
"viewer_id"和"seen_id"都是user_ids,允许我分别搜索用户是查看者或正在查看的用户的实例.
我最初认为这两个列都是外键,但是我在schema.yml文件中创建了表(我使用的是Doctrine 1.2)并指定了两个独立的外部关系(每列一个),看来Doctrine只需要考虑到这两个表之间首先列出的外来关系(user_id> viewer_id).
现在让我感到困惑的是,这是正确的MySQL行为,Doctrine中的问题,还是我接近这个问题的方式有问题,或者没什么可担心的!一个表中是否有两个单独的外键映射到另一个表中的同一列?它是否合乎逻辑,因为JOIN仍然允许我通过user_id访问"视图"?我弄错了吗?
谢谢你的时间.
编辑 - 模式文件:
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
Run Code Online (Sandbox Code Playgroud)
我们走了:你为关系指定了相同的别名.
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
Run Code Online (Sandbox Code Playgroud)
或者您以不同方式设置整个多对多关系:
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
Run Code Online (Sandbox Code Playgroud)
而View
应该像
View:
columns:
viewed_id:
type: integer
primary: true
viewer_id:
type: integer
primary: true
Run Code Online (Sandbox Code Playgroud)
请参阅有关多对多关系的Doctrine文档.