Doctrine YAML数据夹具问题

时间:2009-12-13 04:22:38

标签: doctrine yaml

在哪里可以了解更多abt在yaml和数据夹具中创建数据库标记。

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

abt数据类型。不同的数据库有不同的数据库支我认为在MySQL(这里使用InnoDB)整数shld是tinyint(x),bigint(x),int(x)...或字符串shld是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(Character Large OBject)吗? - iceangel89 0秒前[删除此评论]

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

  4. 更新2

    这将是长期的,我只想澄清Doctrine YAML Schema Files docs page中的一些代码示例。专注于关系部分 - >在//评论

    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
    

2 个答案:

答案 0 :(得分:1)

  

在哪里可以了解更多abt在yaml和数据夹具中创建数据库标记。

主题手册,“YAML schema files”“Data Fixtures”章节。

  

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

是的,但此部分将被称为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 types,比如MySQL's one

答案 1 :(得分:0)

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

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

  1. 在这种情况下,用户有一列 car_id ,这是一个外键 指的是Car的 id 列。所以在用户端,关系 与Car一起使用,包含键值的本地列是 car_id ,其引用的其他(外国)表格中的列为 id
  2. Doctrine定义自己的数据类型,并自动映射它们 到您正在使用的特定数据库的数据类型。 develop7提供了文档的链接,或者你可以查看 学说来源。
  3. foreignAlias给出了外方的关系的名称。 没有别名,因为侧面的 relation 的名称 包含外键的是由该级别使用的名称给出的 在 relations:下面,通常指定为的名称 外键所指的表。
  4. 关于更新2:

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

    foreignAlias:用户从联系人到用户的关系的名称是“用户”。如上所述,没有任何称为“别名”,从用户到联系人的关系的名称是“联系人”,因为这是用户所在的关系列表中的名称。当然,如果你碰巧在同一个两个类之间有多个关系,那么这些默认关系命名就会崩溃;您需要能够提供与类名不同的显式关系名称。 relations 的名称很重要,因为您在DQL连接中使用它们。

    foreignType:one A联系人(外方)有一个用户

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

    请注意,此示例在明确显示相同关系的两侧时有点不寻常。通常,您只在包含外键的一侧(用户端)显示它。由于用户包含指向联系人的外键,因此“类型”只能是“一个”。但是foreignType可以是“很多”,表示许多用户可以指向给定的联系人,但在这种情况下,指定只有一个用户可以引用给定的联系人。

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