【问题标题】:FuelPHP orm relation with multiple foreign keysFuelPHP orm 与多个外键的关系
【发布时间】:2023-04-03 04:27:01
【问题描述】:

我刚刚开始在我的应用程序中使用 FuelPHP,并被堆叠在一个 orm 关系设置中。 我有以下 3 个表,并希望使用项目模型显示带有部门用户名的项目列表。 但我不知道如何设置与 orm 关系的关系。

您如何使用 $_belongs_to、$_has_one、$_has_many 或 $_many_many 来建立这种关系?

我想做的就像 sql "从项目中选择 *、departments.name、users.name 在 projects.department_id = department.id 上离开加入部门 left join users on projects.user_id = users.id"

### TABLE projects ###
CREATE TABLE IF NOT EXISTS `projects` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`department_id` int(11) unsigned NOT NULL,
`user_id` int(11) unsigned NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `department_id` (`department_id`),
KEY `user_id` (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

ALTER TABLE `projects`
ADD CONSTRAINT `m_project_ibfk_1` FOREIGN KEY (`department_id`) REFERENCES `departments` (`id`),
ADD CONSTRAINT `m_project_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);

### TABLE departments ###
CREATE TABLE IF NOT EXISTS `departments` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

### TABLE users ###
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`login_id` varchar(100) NOT NULL,
`nickname` varchar(20) NOT NULL,
`password` varchar(255) NOT NULL,
`last_login_at` timestamp NULL DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

提前致谢。

【问题讨论】:

  • 我想我找到了解决方案。 protected static $_belongs_to = array( 'departments' => array( 'model_to' => 'Model_Departments', 'key_from' => 'department_id', 'key_to' => 'id', 'cascade_save' => true, 'cascade_delete' => false, ), 'users' => array( 'model_to' => 'Model_Users', 'key_from' => 'user_id', 'key_to' => 'id', 'cascade_save' => true, 'cascade_delete' => false, ), );

标签: orm fuelphp


【解决方案1】:

最容易记住的:

多对多关系在两个模型中都使用$_many_many,并且需要一个关系表(又名连接表或联结表)。

对于所有其他人,一侧是$_has_one 或$_has_many,另一侧始终是$_belongs_to。包含外键的模型总是$_belongs_to。

在这个例子中: * 用户 has_many 项目,项目属于_to 用户 * 部门有_许多项目,项目属于_部门

【讨论】:

  • 非常感谢!我知道了。
猜你喜欢
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多