mysql - 可以在 Yii 中修复外键而无需在数据库中设置它吗?

标签 mysql foreign-keys phpmyadmin yii

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

例如,我希望我的 products 表有一个外键 department_id,它是对 id 字段的引用 部门表。不幸的是,我目前没有在 phpMyAdmin 中正确设置外键的工具,所以 department_id 只是一个索引字段。我目前无法更改 phpMyAdmin 的配置,所以它就像没有外键和关系工具一样卡住了。

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

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

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

干杯

最佳答案

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

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

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

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

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

在你的 Department 模型中:

'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

祝你好运,如果我离题太远并且它对你不起作用,请告诉我!

关于mysql - 可以在 Yii 中修复外键而无需在数据库中设置它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4957765/

相关文章:

mysql - SQL:显示两个表的结果

MySQL "many to many"关系错误

PHP MYSQL 超时问题

php - 计算子表中的相关行数

mysql - AD 日期的数据仓库

mysql - 订单日期在 MySql 中存储为 VARCHAR?

mysql - 添加外键时出现错误 1215。帮助我解决我没有尝试过的事情

c# - Linq to SQL 数据上下文不更新外键关系

mysql - phpvms 和 mySQL 密码剩余

php - 如何防止从 PHP 到 MYSQL 的多次插入重复条目