Zend Doctrine 1.2 foreignAlias 在 YAML 架构文件中被忽略.在学说 CLI 中构建所有


Zend Doctrine 1.2 foreignAlias is ignored in YAML schema file. Error during build-all cmd in Doctrine Cli

>我有一个简单的问题,我不明白为什么它不起作用......服务器:最新的ZendServer CE,ZF:1.11.11,学说:1.2.2

YAML 架构:

       Uzytkownik:          表名称: uzytkownicy          列:            编号:              类型:整数              固定:假          无符号:真          主要:真          自动增量:真        uzytkownik_dane_id:          类型:整数        登录:          类型:字符串(64(          不为空:真        哈斯罗:          类型:字符串(96(          不为空:真        电子邮件:          类型:字符串(192(          不为空:真        纳兹瓦:          类型:字符串(64(      关系:        UzytkownikDane:          本地: uzytkownik_dane_id          外国:身份证          外文别名:戴恩          国外类型:一种    UzytkownikDane:      表名称: uzytkownicy_dane      列:        编号:          类型:整数          固定:假          无符号:真          主要:真          自动增量:真        艾米:          类型:字符串(128(        纳兹维斯科:          类型:字符串(128(        克拉吉:          类型:字符串(32(        wojewodztwo:          类型:字符串(64(        miejscowosc:          类型:字符串(128(        阿德雷斯:          类型:字符串(128(        科德:          类型:字符串(16(        电话:          类型:字符串(16(      关系:        Uzytkownik:          本地:ID          国外: uzytkownik_dane_id

通过 Doctrine Cli 构建全部重新加载生成的模型:

   hasOne('Application_Model_UzytkownikDane as UzytkownikDane', array(                 "本地" => "uzytkownik_dane_id",                 "外国" => "id"((;        }    }

如您所见,Cli 忽略了我的别名并设置默认值:Application_Model_UzytkownikDane为 UzytkownikDane...为什么?塞昆德的事情是(可能这很重要我不知道...当我从 yml 文件构建所有模型时,学说 CLI 输出我错误:

   构建全部重新加载 - 是否确实要删除数据库?(是/否(    y    构建全部重新加载 - 已成功删除名为"doctrine"连接的数据库    生成全部重新加载 - 从 YAML 架构成功生成模型    构建全部重新加载 - 成功创建名为"doctrine"的连接数据库    SQLSTATE[HY000]:一般错误:1005 无法创建表"testdb.#sql-188_3a"(e    RRNO:150(。失败的查询:"ALTER TABLE uzytkownik ADD CONSTRAINT uzytkownik_uzy    tkownik_dane_id_uzytkownik_dane_id 外键 (uzytkownik_dane_id( 引用 U    zytkownik_dane(同上("。Failed Query: ALTER TABLE uzytkownik ADD CONSTRAINT uzytko    wnik_uzytkownik_dane_id_uzytkownik_dane_id 外键 (uzytkownik_dane_id( REFE    朗塞斯uzytkownik_dane(同上(

为什么? ofc 所有工作关系都工作等,但别名不起作用,Cli 输出错误...问候

不知道为什么不尊重foreignAlias设置,回家后我会检查一些代码。

但我认为您获得失败的alter table响应的原因是因为:

Uzytkownik:
  ....
  uzytkownik_dane_id:
    type: integer
    # This is missing the unsigned attribute, as set in `UzytkownikDane.columns.id`
    # Also it may not hurt to add the fixed attribute as well, although I don't think it will matter

MySQL希望两列的数据类型相同,因此如果一列被标记为无符号,另一列被标记为有符号,您将收到您发布的SQL错误。

--更新--

根据教义 1.2 文档:

指定关系

时,只需在外键所在的端指定关系。解析架构文件时,它会反映关系并自动构建相反的一端。如果手动指定关系的另一端,则自动生成将不起作用。

我遵循他们的指导方针,只在包含外键的表上建立关系,所以试一试:

Uzytkownik:
  tableName: uzytkownicy
    columns:
      id:
        type: integer
        fixed: false
        unsigned: true
        primary: true
        autoincrement: true
      uzytkownik_dane_id:
        type: integer
      login:
        type: string(64)
        notnull: true
      haslo:
        type: string(96)
        notnull: true
      email:
        type: string(192)
        notnull: true
      nazwa:
        type: string(64)
      relations:
        UzytkownikDane:
          local: uzytkownik_dane_id
          foreign: id
          foreignAlias: Dane # Set this if you want the UzytkownikDane to reference this as Dane
          alias: Dane # Set this if you want this table to reference UzytkownikDane as Dane (which I think is what you want)
          foreignType: one
UzytkownikDane:
  tableName: uzytkownicy_dane
  columns:
    id:
      type: integer
      fixed: false
      unsigned: true
      primary: true
      autoincrement: true
    imie:
      type: string(128)
    nazwisko:
      type: string(128)
    kraj:
      type: string(32)
    wojewodztwo:
      type: string(64)
    miejscowosc:
      type: string(128)
    adres:
      type: string(128)
    kod:
      type: string(16)
    telefon:
      type: string(16)    
  # No need for references here, they will be auto-generated by Doctrine

我测试了构建模型,并按照 Doctrine 文档的要求行事。