php - 在 Yii2 框架中加入多个表
问题描述
我的数据库中有 4 个表:
表project_ppi:
- id(主键)
表 scopus_author:
- id(主键),
- project_ppi,-> 链接到表 project_ppi 中的 id
- author_scopus_id
表 author_subject_area:
- author_id (PRIMARY KEY) -> 链接到表 scopus_author 中的 id
表 project_author_match:
- project_ppi (PRIMARY_KEY),
- author_scopus_id(主键),
- 匹配值
我需要做什么:
在实践中,给定一个项目(表 project_ppi),我需要显示链接到该项目的所有作者(表 scopus_author),并为每个作者显示他/她的工作领域(表 author_subject_area),但按 match_value 排序结果(表 project_author_match) .
我可以在“普通 SQL”语句中做到这一点,但我被困在 Yii2 框架中。我的 php 中的每个表都有一个模型,但我真的不知道从哪里开始。
谁能给我一个提示?
提前致谢!
解决方案
简而言之
已经有一些指南可以帮助您,并说明您使用的是普通的 SQL 数据库;像 MariaDB 或 MySQL 因此你应该使用ActiveRecord模型。更多细节在这里(https://www.yiiframework.com/doc/guide/2.0/en/db-active-record)
一点细节
正如你应该做的那样,你有每个表的模型,然后在每个模型中添加一个最好称为“getSomething”的方法,这使用表之间的“hasOne”或“hasMany”关系,然后在你的 Yii 查询中只需使用 joinWith('relationName') 方法即可进行查询。一个例子:
$query = Post::find()->joinWith('user')->where(['user.id' => 1]);
此查询将获取由 ID 为 1 的用户编写的所有帖子。假设一个具有 2 个表用户的简单数据库,发布
推荐阅读
- html - 将自动生成的链接更改为带有发送给客户的电子邮件中的文本的按钮
- java - 为什么从 arraylist remove 方法中删除倒数第二个元素不会引发 ConcurrentModificationException?
- gnuplot - 尽管在一个子图中出现“所有点 Y 值未定义”错误,但继续多图的其余部分
- javascript - 如何在本地存储中存储字母而不是 Javascript 中的点击计数?
- c++ - 为什么指针的值会意外改变?
- ios - 在呈现视图控制器之前,目标 C 中的 IBOutlet 为零
- css - 如何将后缀为“.scss”的文件导入到Vue项目的子组件中?
- java - 为什么 URL 构造函数不允许相对 URL?
- html - 如何在图像旁边对齐标题和副标题?
- c# - 在自定义 ASP.NET Core 配置提供程序中停止 SqlDependency