Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否可以在没有在数据库中设置的情况下修复Yii中的外键?_Mysql_Foreign Keys_Phpmyadmin_Yii - Fatal编程技术网

Mysql 是否可以在没有在数据库中设置的情况下修复Yii中的外键?

Mysql 是否可以在没有在数据库中设置的情况下修复Yii中的外键?,mysql,foreign-keys,phpmyadmin,yii,Mysql,Foreign Keys,Phpmyadmin,Yii,我使用phpMyAdmin作为我的数据库GUI,它连接到我网站上的Yii框架 例如,我希望我的产品表有一个外键部门id,它是对我的部门表的id字段的引用。不幸的是,我目前没有在phpMyAdmin中正确设置外键的功能,因此部门id只是一个索引字段。我目前无法更改phpMyAdmin的配置,因此它会像没有外键和关系设施一样被卡住 有没有办法修改Yii中这些表的模型,以便它们链接?我知道模型类文件中有一个关系函数,用于保存以下信息: return array('department_id' =>

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

例如,我希望我的
产品
表有一个外键
部门id
,它是对我的
部门
表的
id
字段的引用。不幸的是,我目前没有在phpMyAdmin中正确设置外键的功能,因此
部门id
只是一个索引字段。我目前无法更改phpMyAdmin的配置,因此它会像没有外键和关系设施一样被卡住

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

return array('department_id' => array(self::BELONGS_TO, 'Departments', 'id'),
我是否可以添加类似于上述内容的内容?还有更多的腿部工作吗?由于phpMyAdmin,它现在是否已修复(如静态,未更正)


干杯

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

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

然后,Yii使用表关系的这些知识(来自YIC),通过提供访问关系数据的快捷方法,并确保您不会违反mySql约束和出现难看的SQL错误等,让您的生活更轻松。但是,您仍然可以使用Yii关系逻辑,而无需底层SQL约束唯一的问题是,如果Yii出错并分配了不存在的FK或其他内容,您的数据库将无法捕获此错误(您的数据完整性将更容易出错)。

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

'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

祝你好运,如果我离垒太远了,而且对你不起作用,请告诉我

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

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

然后,Yii使用表关系的这些知识(来自YIC),通过提供访问关系数据的快捷方法,并确保您不会违反mySql约束和出现难看的SQL错误等,让您的生活更轻松。但是,您仍然可以使用Yii关系逻辑,而无需底层SQL约束唯一的问题是,如果Yii出错并分配了不存在的FK或其他内容,您的数据库将无法捕获此错误(您的数据完整性将更容易出错)。

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

'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

祝你好运,如果我离垒太远了,而且对你不起作用,请告诉我

+1。这个答案完全正确。Yii不要求数据库本身具有FK关系,它确实需要了解它们(通过relations()函数),尽管它们是否存在。我们有一个非常大的项目在Yii运行,在DB中没有实际关系。我们刚刚在Yii本身中设置了所有验证和关系,因为它更容易处理代码中的关系错误编辑:由于数据完整性是通过验证来实现的,请确保设置得非常好。如果您需要通过非主键连接关系,那么您就有麻烦了。在我需要加入合同和目录的集成环境中遇到了这个问题。关系不是Contract.ID=catalog.Contract,而是通过Contract.SomeOtherId=catalog.Contract。Yii无法处理此情况,除非存在FK(如果存在FK,则在运行时使用该关系)。+1。这个答案完全正确。Yii不要求数据库本身具有FK关系,它确实需要了解它们(通过relations()函数),尽管它们是否存在。我们有一个非常大的项目在Yii运行,在DB中没有实际关系。我们刚刚在Yii本身中设置了所有验证和关系,因为它更容易处理代码中的关系错误编辑:由于数据完整性是通过验证来实现的,请确保设置得非常好。如果您需要通过非主键连接关系,那么您就有麻烦了。在我需要加入合同和目录的集成环境中遇到了这个问题。关系不是Contract.ID=catalog.Contract,而是通过Contract.SomeOtherId=catalog.Contract。Yii无法处理这种情况,除非存在FK(如果存在FK,则在运行时使用该关系)。