可以修改Yii中的外键而不在数据库中设置它?

时间:2011-02-10 13:39:44

标签: mysql foreign-keys phpmyadmin yii

我正在使用phpMyAdmin作为我的数据库GUI,它正在我的网站上连接到Yii Framework。

我希望我的products表格有一个外键department_id,它是对id表的departments字段的引用。不幸的是,我目前没有在phpMyAdmin中正确设置外键的功能,因此department_id只是一个索引字段。我现在无法更改phpMyAdmin的配置,所以它就像没有外键和关系设施一样卡住了。

有没有办法在Yii中修改这些表的模型,以便它们链接?我知道Model Class文件中有一个relations函数来保存这些信息:

return array('department_id' => array(self::BELONGS_TO, 'Departments', 'id'),

我可以不只是添加类似于上面的内容吗?有更多的腿部工作吗?现在是否因为phpMyAdmin而修复(如静态,未更正)?

干杯

1 个答案:

答案 0 :(得分:4)

如果我没弄错的话,你不需要让mySql强制执行外键关系,以便它们仍能在Yii中工作。在mySql中设置FK约束可确保正确的数据库完整性,但我不认为Yii实际上在运行时使用它。

当最初运行yiic(Gii)来构建项目时,我认为它会查看DB以在模型中构建正确的关系,但之后它不会使用它们。

然后,Yii使用表关系的这些知识(来自yiic),通过提供访问关系数据的快捷方法,确保不违反mySql约束并获得丑陋的SQL错误等,让您的生活更轻松。但是你仍然可以使用Yii关系逻辑而不需要基础SQL约束。 唯一的问题是,如果Yii搞砸并分配一个不存在的FK或其他东西,你的数据库就不会发现这个错误(你的数据完整性会更容易出错)。

要将您的产品链接到部门,只需确保产品中有department_id字段(听起来就是这样)。然后将类似关系规则添加到Product:

'department' => array(self::BELONGS_TO, 'Department', 'department_id'),

在你的部门模型中:

'products' => array(self::HAS_MANY, 'Product', 'department_id'),

现在你应该能够使用正常的关系:

$myProductModel->department; // returns the model of the Department referenced
$myDepartmentModel->products; // returns the models of all Products in the department

祝你好运,如果我离开基地并且它不适合你,请告诉我!