1

我在哪里可以了解更多关于在 yaml 和数据夹具中创建数据库标记的信息。

我遵循了一个教程,他们创建了这样的关系:在用户和汽车的关系下。我的 qn 是为什么 Car 中的“类型:很多”。我可以在用户中使用它吗(只是好奇)?

ab 数据类型。不同的数据库有不同的数据库支持。我认为在 MySQL 中(这里使用的 InnoDB)整数应该是 tinyint(x)、bigint(x)、int(x) ......或者字符串应该是 varchar 而不是字符串?我在这里使用什么不严格吗?

options:
  type: INNODB
  collate: utf8_general_ci
  charset: utf8

User:
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    name: string(300)
    email: string(300)
    phone: string(9)
    car_id: integer
  relations: 
    Car: 
      local: car_id
      foreign: id
Car:
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    brand: string(300)
  relations:
    Users:
      class: User
      foreign: car_id
      local: id
      type: many

更新 1

  1. 在我的示例中,“只需要在外键存在的末尾指定关系”,那将是?它们是指 FK 表(汽车)还是 FK 列(用户)?

  2. 我没有看到 TEXT 数据类型,是 clob(字符大对象)吗?– iceangel89 0 秒前 [删除此评论]

  3. 什么是外国别名?也有别名吗?

更新 2

这会有点长,我只想澄清Doctrine YAML Schema Files 文档页面中的一些代码示例。关注关系部分 -> 在 // 评论中

User:
  columns:
    username:
      type: string(255)
    password:
      type: string(255)
    contact_id:
      type: integer
  relations:
    Contact:
      class: Contact // if the table is named Contact, class will be Contact also?
      local: contact_id 
      foreign: id
      foreignAlias: User // whats alias for? 
      foreignType: one // one contact ... to ...
      type: one // one user?

Contact:
  columns:
    first_name:
      type: string(255)
    last_name:
      type: string(255)
    phone:
      type: string(255)
    email:
      type: string(255)
    address:
      type: string(255)
  relations:
    User:
      class: User
      local: id
      foreign: contact_id
      foreignAlias: Contact
      foreignType: one
      type: one

对于多对多的例子,以下是什么意思?

attributes:
  export: all
  validate: true

tableName: group_table

refClass: GroupUser
4

2 回答 2

0

我知道这是旧的,但这些是我发现令人困惑的事情,并且仍然存在。事实上,我并不是所有可能性方面的专家,这只是基于对我有用的东西。我认为您可能正在寻找多对多关系,但我完全避免 Doctrine 对它们的支持,而是明确定义我自己的关联表,所以我只使用一对多和一对一关系.

如 UPDATE1 中所述,您仅在具有外键的末尾指定关系。

  1. 在这种情况下,User 有一个car_id列,它是一个外键,引用 Car 的id列。所以在用户端,关系是 Car,包含键值的本地列是 car_id,它所引用的另一个(外部)表中的列是id
  2. Doctrine 定义了自己的数据类型,并自动将它们映射到您正在使用的特定数据库的数据类型上。develop7 提供了文档的链接,或者您可以查看学说来源。
  3. foreignAlias 为外部的关系命名。没有别名,因为包含外键的关系的名称由在关系以下级别使用的名称给出,通常指定为外键所引用的表的名称。

关于更新 2:

class: Contact User 的 yaml 表示它有一个名为Contact的关系,它引用类Contact。默认情况下,类名和表名是相同的;yaml 模式只处理类名,尽管可以告诉它为给定的类使用不同的表名。

foreignAlias: User从联系人到用户的关系 名称是“用户”。如上所述,没有所谓的“别名”,从用户到联系人的关系名称是“联系人”,因为这是该行出现在用户关系列表中的名称。当然,如果您碰巧在相同的两个类之间有多个关系,这些默认关系命名就会失效。您需要能够给出与类名不同的显式关系名称。关系的名称很重要,因为您在 DQL 连接中使用它们。

foreignType:一个 A Contact(外方)有一个User

type: one A User(本地端)有一个Contact。

请注意,此示例在明确显示同一关系的双方方面有点不寻常。通常,您只会在包含外键的一侧(用户侧)显示它。由于 User 包含指向 Contact 的外键,因此“type”只能是“one”。但是 foreignType 可以是“many”,表示给定的联系人可以被许多用户指向,尽管在这种情况下指定只有一个用户可以引用给定的联系人。

我实际上不知道如果您将类型指定为“许多”会发生什么。实现它需要像多对多关系那样的额外关联表,而且我不知道 Doctrine 是否会像多对多关系那样“自动”创建这样一个表。对于我对 Doctrine 的使用,我尽可能避免基于我不太理解的命名约定的隐式机制,因此我关闭了“detect_relations”并避免了多对多关系。

于 2012-06-03T06:33:41.860 回答