>我有一个简单的问题,我不明白为什么它不起作用......服务器:最新的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 文档的要求行事。