2011-05-16 37 views
3

在我的模式中,我有一些需要BIGINT的字段。我使用symfony的如何獲得學說與BIGINT類型生成SQL?

symfony doctrine:build-sql 

來生成我的數據庫。

這些字段總是以int類型出現。

我已經在模式嘗試以下幾種類型:

int 

{type: integer, notnull: true} 

{type: integer(5), notnull: true} 

{type: bigint, notnull: true} 

他們都不似乎工作(我總是重建生成SQL之前的型號)。

我應該在schema.yml中放什麼類型?

回答

14

使用Symfony 2.x(例如Doctrine 2.4.1)和實體上的PHP註釋,使用@ORM\Column(name="id", type="bigint")導致MySQL bigint(20)

注意:OP用symfony1 & doctrine1標記了這個問題,爲此解決方案將不工作

+0

問題是關於symfony1,通常使用doctrine1。這不應該被接受(或甚至upvoted)。它應該是一個評論 – greg0ire 2013-10-14 12:02:40

+1

@ greg0ire - 你是對的 - 應該是一個評論。在這裏搜索Symfony2的地方,我最初並沒有注意到symfony1標籤 - 應該編輯Q,以便明確表明大多數流量都與Symfony2有關+ – DavidJ 2013-10-14 15:17:29

+0

是的,如果問題沒有被標記,請不要責怪回答者正確! – 2013-10-14 15:35:52

5

這取決於你的RDBMS,但是如果你使用MySQL,你可以閱讀的lib /插件/ sfDoctrinePlugin/lib中/供應商/學說/教義/ DataDict/Mysql.php

case 'integer': 
    case 'int': 
      if (! empty($field['length'])) { 
       $length = $field['length']; 
       if ($length <= 1) { 
        return 'TINYINT'; 
       } elseif ($length == 2) { 
        return 'SMALLINT'; 
       } elseif ($length == 3) { 
        return 'MEDIUMINT'; 
       } elseif ($length == 4) { 
        return 'INT'; 
       } elseif ($length > 4) { 
        return 'BIGINT'; 
       } 
      } 
      return 'INT'; 

所以你的第二次嘗試應該已經工作......或者你使用另一個RDBMS嗎?你應該在這行代碼中設置一個斷點並逐步進行調試,這很奇怪。另外,檢查你的Mysql.php文件的內容,看看你是否和我一樣(我使用sf 1.4.11附帶的原則)

0

是的,整數(5)應該做的工作。

您可以檢查The symfony and Doctrine book中的其他模式數據類型,但請記住它是1.2版本,並且不再進行維護。

此致敬禮。