我在CakePHP中定义关系时遇到了麻烦。我有以下数据模型:
+--------------+
| Course |
+--------------+
| other fields |
| T_id |---+
| A_id |-+ | +--------------+
+--------------+ | | | Item |
| | +--------------+
+--------------+ +-------| id |
| Paragraph | | | | other fields |
+--------------+ | | +--------------+
| other fields | | |
| T_id |-+ |
| A_id |---+
+--------------+
有2个表与另一个表有关系。 此外:课程和段落中的每一个都有两个"项目"。我以为我会将T-id和A_id定义为带有Item的hasOne,但CakePHP似乎并不同意这一点:-) hasOne感觉semantiaclly正确,但...它不起作用(CRUD生成的代码没有给我一个下拉选项。它确实创建一个下拉列表,但是它是空的。
如何定义模型,以便CakePHP理解每个表中的两个关键字段都指向一个项目? (因此,如果有1章和1段,总共会有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;
的问候,
保
答案 0 :(得分:0)
我会尝试做类似以下的事情
项目模型
class Item extends AppModel {
public $hasOne = array(
'CourseA' => array(
'className' => 'Course',
'foreignKey' => 'item_a_id',
'type' => 'INNER'
),
'CourseB' => array(
'className' => 'Course',
'foreignKey' => 'item_b_id',
'type' => 'INNER'
),
'ParagraphA' => array(
'className' => 'Paragraph',
'foreignKey' => 'item_a_id',
'type' => 'INNER'
),
'ParagraphB' => array(
'className' => 'Paragraph',
'foreignKey' => 'item_b_id',
'type' => 'INNER'
)
);
}
课程模型
class Course extends AppModel {
public $belongsTo = array(
'ItemA' => array(
'className' => 'Item',
'foreignKey' => 'item_a_id',
'type' => 'INNER'
),
'ItemB' => array(
'className' => 'Item',
'foreignKey' => 'item_b_id',
'type' => 'INNER'
)
);
}
段落模型
class Paragraph extends AppModel {
public $belongsTo = array(
'ItemA' => array(
'className' => 'Item',
'foreignKey' => 'item_a_id',
'type' => 'INNER'
),
'ItemB' => array(
'className' => 'Item',
'foreignKey' => 'item_b_id',
'type' => 'INNER'
)
);
}
这并不严格遵循您的数据库表格布局,我个人觉得有更多的描述性字段比a_id更好,因为item_a_id的描述性足以显示另一个开发者,该字段链接到项目记录。
这要求Course和Paragraph表将字段“item_a_id”和“item_b_id”设置为INT / MEDIUMINT等。