在 Yii2 框架中连接多个表
Join multiple tables in Yii2 framework
我的数据库中有 4 个 table:
Table project_ppi:
- id(主键)
Table scopus_author:
- id(主键),
- project_ppi, -> 链接到 table project_ppi
中的 id
- author_scopus_id
Table author_subject_area:
- author_id(主键)-> 链接到 table scopus_author
中的 id
Table project_author_match:
- project_ppi (PRIMARY_KEY),
- author_scopus_id(主键),
- match_value
我需要做的事情:
在实践中,给定一个项目 (table project_ppi) 我需要显示链接到该项目的所有作者 (table scopus_author) 以及每个作者显示 his/her 工作区域 (table author_subject_area) 但按 match_value (table project_author_match).
[ 排序结果=23=]
我可以在“正常 SQL”语句中完成,但我坚持在 Yii2 框架中完成。
我的 php 中每个 table 都有一个模型,但我真的不知道从哪里开始。
任何人都可以给我提示吗?
提前致谢!
简而言之
已经有一些指南可以帮助您,并说明您使用的是普通 SQL 数据库;像 MariaDB 或 MySQL 因此你应该使用 ActiveRecord 模型。此处有更多详细信息 (https://www.yiiframework.com/doc/guide/2.0/en/db-active-record)
一些细节
正如您应该做的那样,每个 table 都有模型,然后在每个模型中添加一个最好称为“getSomething”的方法,它使用“hasOne”或“hasMany”关系在 tables 之间,那么在你的 Yii 查询中,你只需使用 joinWith('relationName') 方法就可以进行查询。一个例子:
$query = Post::find()->joinWith('user')->where(['user.id' => 1]);
并且此查询将获取 ID 为 1 的用户写入的所有 post。假设一个简单的数据库有 2 个 table 用户,post
我的数据库中有 4 个 table:
Table project_ppi:
- id(主键)
Table scopus_author:
- id(主键),
- project_ppi, -> 链接到 table project_ppi 中的 id
- author_scopus_id
Table author_subject_area:
- author_id(主键)-> 链接到 table scopus_author 中的 id
Table project_author_match:
- project_ppi (PRIMARY_KEY),
- author_scopus_id(主键),
- match_value
我需要做的事情:
在实践中,给定一个项目 (table project_ppi) 我需要显示链接到该项目的所有作者 (table scopus_author) 以及每个作者显示 his/her 工作区域 (table author_subject_area) 但按 match_value (table project_author_match).
[ 排序结果=23=]
我可以在“正常 SQL”语句中完成,但我坚持在 Yii2 框架中完成。
我的 php 中每个 table 都有一个模型,但我真的不知道从哪里开始。
任何人都可以给我提示吗?
提前致谢!
简而言之
已经有一些指南可以帮助您,并说明您使用的是普通 SQL 数据库;像 MariaDB 或 MySQL 因此你应该使用 ActiveRecord 模型。此处有更多详细信息 (https://www.yiiframework.com/doc/guide/2.0/en/db-active-record)
一些细节
正如您应该做的那样,每个 table 都有模型,然后在每个模型中添加一个最好称为“getSomething”的方法,它使用“hasOne”或“hasMany”关系在 tables 之间,那么在你的 Yii 查询中,你只需使用 joinWith('relationName') 方法就可以进行查询。一个例子:
$query = Post::find()->joinWith('user')->where(['user.id' => 1]);
并且此查询将获取 ID 为 1 的用户写入的所有 post。假设一个简单的数据库有 2 个 table 用户,post