【发布时间】:2014-04-16 09:35:37
【问题描述】:
我在 CakePHP 中定义关系时遇到问题。我有以下数据模型:
+--------------+
| Course |
+--------------+
| other fields |
| T_id |---+
| A_id |-+ | +--------------+
+--------------+ | | | Item |
| | +--------------+
+--------------+ +-------| id |
| Paragraph | | | | other fields |
+--------------+ | | +--------------+
| other fields | | |
| T_id |-+ |
| A_id |---+
+--------------+
其中有 2 个表与另一个表有关系。 此外:每一个课程和段落都有两个“项目”。我以为我会用 Item 将 T-id 和 A_id 定义为 hasOne,但 CakePHP 似乎不同意这一点:-) hasOne 感觉语义正确,但是......它不起作用(CRUD 生成的代码没有给我一个下拉列表来选择项目。它确实创建了一个下拉列表,但它是空的。
如何定义模型,让CakePHP 理解每个表中的这两个关键字段都指向一个Item? (因此,如果有 1 章和 1 段,则 Item 中总共将有 4 条记录。)
目前,我有这个:
'AItem' => array(
'className' => 'Item',
'foreignKey' => 'id',
'conditions' => array('a_item_id = Item.id'),
'fields' => '',
'order' => ''
)
用于生成课程表的 SQL:
CREATE TABLE IF NOT EXISTS `courses` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`a_item_id` bigint(20) DEFAULT NULL,
`t_item_id` bigint(20) DEFAULT NULL,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
foreign key (a_item_id) references items(id) on delete cascade,
foreign key (t_item_id) references items(id) on delete cascade
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
问候,
保罗
【问题讨论】:
-
自己生成代码或尝试从 Cake-Bake-Console 生成代码
-
我正在尝试使用 bake-console 生成它,但显然我的模型不正确。
-
你是在 PHP-MY-ADMIN 中使用 INNODB-Engine 创建的吗
-
使用纯 SQL 创建;将 SQL 添加到问题中