【问题标题】:Doctrine YAML Data Fixture QuestionDoctrine YAML 数据夹具问题
【发布时间】:2010-12-26 02:47:16
【问题描述】:

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

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

abt 数据类型。不同的数据库有不同的数据库支持。我认为在 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. 什么是foreignAlias?还有别名吗?

更新 2

这有点长,我只是想澄清Doctrine YAML Schema Files docs page 中的一些代码示例。关注关系部分 -> 在 // cmets

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

关于many to many example,下面是什么意思?

attributes:
  export: all
  validate: true

tableName: group_table

refClass: GroupUser

【问题讨论】:

    标签: doctrine yaml


    【解决方案1】:

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

    教义手册,“YAML schema files”“Data Fixtures” 章节。

    我可以在 User 中使用它吗(只是好奇)?

    是的,但是这个部分将被称为foreignType。这里举个例子:

    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
          foreignType: many
    

    abt 数据类型...

    嗯,Doctrine 列类型和数据库列类型“略有”不同。只需比较list of Doctrine column typesMySQL's one

    【讨论】:

    • 关于关系类型。在您的示例中,foreignType 不是一个吗?嗯 ...(1 个用户 -> 1 辆汽车,1 辆汽车 -> 许多用户)。当我指定关系时:汽车:foreignType:一,这是什么意思?一个用户? – iceangel89 1 分钟前 [删除此评论]。 + 查看更新 1
    • 不,不应该,因为它是外国
    • hmm... 好的,当你在这种情况下(你的代码)说“foreignType:many”时,它是指(1 个用户到)许多汽车还是(1 个汽车到)许多用户。和foreignAlias一样,是什么意思?或者它是用来做什么的?
    • foreignType 声明在User 一侧,意思是many Cars。这就是为什么它是外国foreignAlias: User 意味着我们通过$contact->User从联系人的实例中获取用户实例
    • 所以只是总结一下,在你上面的答案中,用户:关系:汽车:外国类型:很多。这意味着一位用户拥有多辆汽车?
    【解决方案2】:

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

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

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

    关于更新 2:

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

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

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

    类型:一个一个用户(本地)有一个联系人。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 2015-10-07
      • 2011-10-04
      • 1970-01-01
      相关资源
      最近更新 更多