0

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

YAML 架构:

        乌兹特科尼克:
          表名:uzytkownicy
          列:
            ID:
              类型:整数
              固定:假
          无符号:真
          主要:真
          自动增量:真
        uzytkownik_dane_id:
          类型:整数
        登录:
          类型:字符串(64)
          非空:真
        哈斯洛:
          类型:字符串(96)
          非空:真
        电子邮件:
          类型:字符串(192)
          非空:真
        纳兹瓦:
          类型:字符串(64)
      关系:
        Uzytkownik丹麦人:
          本地:uzytkownik_dane_id
          国外:身份证
          外号:Dane
          外国类型:一

    Uzytkownik丹麦人:
      表名:uzytkownicy_dane
      列:
        ID:
          类型:整数
          固定:假
          无符号:真
          主要:真
          自动增量:真
        咪咪:
          类型:字符串(128)
        纳兹维斯科:
          类型:字符串(128)
        克拉吉:
          类型:字符串(32)
        wojewodztwo:
          类型:字符串(64)
        米耶斯科沃斯克:
          类型:字符串(128)
        地址:
          类型:字符串(128)
        科德:
          类型:字符串(16)
        电话:
          类型:字符串(16)
      关系:
        乌兹特科尼克:
          本地:身份证
          外国:uzytkownik_dane_id

通过 Doctrine Cli build-all-reload 生成的模型:

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

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

    build-all-reload - 您确定要删除数据库吗?(是/否)
    是的
    build-all-reload - 成功删除名为“doctrine”的连接的数据库

    build-all-reload - 从 YAML 模式成功生成模型
    build-all-reload - 成功为名为“doctrine”的连接创建数据库

    SQLSTATE[HY000]: 一般错误: 1005 Can't create table '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(id)"。失败的查询:ALTER TABLE uzytkownik ADD CONSTRAINT uzytko
    wnik_uzytkownik_dane_id_uzytkownik_dane_id 外键 (uzytkownik_dane_id) 参考
    RENCES uzytkownik_dane(id)

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

4

1 回答 1

0

不知道为什么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 错误。

- 更新 -

根据Doctrine 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 文档的要求行事。

于 2012-05-09T21:34:27.053 回答