2009-12-13 41 views
0

我在哪裏可以學到更多的abt在yaml和數據夾具中創建數據庫標記。學說YAML數據夾具問題

我跟着一個教程,他們創建了這樣的關係:在用戶和汽車的關係下。我的qn是爲什麼在汽車中輸入'many:'。我可以用它在用戶(只是好奇)?

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. 什麼是foreignAlias?還有別名嗎?

UPDATE 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 

回答

1

我在哪裏可以學到更多生根粉在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 

生根粉數據類型...

好,學說列類型和數據庫列類型是「稍微」不同。只需比較list of Doctrine column typesMySQL's one即可。

+0

關於關係類型。在你的例子中,shldn't foreignType是一個嗎?嗯...(1名用戶 - > 1輛車,1輛車 - >許多用戶)。當我指定關係時:car:foreignType:one,這是什麼意思?一個用戶? - iceangel89 1分鐘前[刪除此評論]。 +請參閱更新1 – iceangel89 2009-12-13 14:04:02

+0

不,它不應該,因爲它是**外國** – develop7 2009-12-13 17:50:25

+0

嗯......好的當你在這種情況下(你的代碼)說「foreignType:many」時,它是否意味着(1個用戶)許多車或(1車到)許多用戶。與foreignAlias相同,這是什麼意思?或它用於什麼? – iceangel89 2009-12-14 04:47:48

0

我知道這是舊的,但這些都是我發現令人困惑的事情,現在仍然如此。事實上,我不是所有可能性的專家,這只是基於對我有用的東西。我想你可能正在尋找多對多的關係,但我完全避免了對它們的支持,而是明確地定義了我自己的關聯表,所以我只使用一對多和一對一的關係。

如UPDATE1所述,您只能在具有外鍵的末尾指定關係。

  1. 在這種情況下,用戶有一個列car_id這是一個外鍵 是指汽車的ID列。因此,在用戶端,關係 是租車,包含鍵值本地列是 car_id,而在其它(國外)表中的列到它是指爲ID
  2. Doctrine定義了自己的數據類型,並自動將它們映射到您正在使用的特定數據庫的數據類型上。 develop7提供了文檔鏈接,或者您可以查看 原則來源。
  3. foreignAlias給出了關係的名稱。 沒有別名,因爲包含外鍵的一側 的關係的名稱是通過在水平 以下關係中使用的名稱給出:,也就是通常指定爲 表的名稱到外鍵是指。

關於更新2:

類:聯繫爲用戶YAML說,它有一個名爲相關聯繫其中參考類聯繫。默認情況下,類名和表名是相同的; yaml模式僅處理類名,儘管可以告訴它爲給定的類使用不同的表名。

foreignAlias:用戶從聯繫人到用戶的關係的名稱是「用戶」。如上所述,沒有什麼叫「別名」,從用戶到聯繫人的關係的名稱是「聯繫人」,因爲這是用戶在其下面出現的關係列表中的名稱。當然,如果你碰巧在相同的兩個類之間有多個關係,那麼這些默認關係命名就會崩潰;你需要能夠給出明確的關係與類名稱不同的名稱。 關係的名稱很重要,因爲您在DQL連接中使用它們。

foreignType:一個觸點(外方)有一個用戶

類型:一個用戶(本地端)有一個聯繫。

請注意,此示例在明確顯示相同關係的兩側時有點不尋常。通常情況下,你只會在包含外鍵的一面顯示它(用戶端)。由於用戶包含指向聯繫人的外鍵,因此「類型」只能是「1」。但是,foreignType可能是「很多」,表明給定的聯繫人可能被許多用戶指向,但在這種情況下,指定只有一個用戶可以引用給定的聯繫人。

我實際上不知道如果將類型指定爲「許多」會發生什麼情況。實現這將需要像多對多關係那樣的額外關聯表,並且我不知道Doctrine是否會像「多對多」關係那樣「自動」創建這樣的表。對於我的學說的使用,我避免了基於命名約定的隱式機制,這些命名約定我儘可能不理解,所以我關閉了「檢測關係」並避免了多對多關係。