为多对多关系创建连接

qyuhtwio  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(387)

我无法处理join和多对多数据库关系。
我有3张table(结构简化了)
用户:

id (primary)    |    userEmail    |    userName    |    userAddress    |    userCreated

团队:

id (primary)    |    teamName    |    teamLogo    |    teamCreated

团队用户

id (primary)    |    userId    |    teamId    |   userLevel

团队可以有很多用户。用户可以在许多团队中。usersteams表跟踪哪些用户在哪个团队中(注意:我没有使用外键或任何东西)。
当用户登录时,我想得到他们所属的所有团队的列表以及相应的数据,即。
从用户获取数据(其中id=$id)
在团队用户中查找
通过teams users中的teamid从团队获取团队信息
全部存储在一个数组中
到目前为止,我有这个代码,但老实说,我只是尝试了很多变化:

$model->select('users.*, teams.*, teams.id as teamId, teams-users.id as teamsUsersId, teams-users.userId as teamsUsersUserId, teams-users.teamId as teamsUsersTeamId');
    $model->where("users.id", $id);
    $model->join('teams-users','teams.id = teams-users.teamId','inner');

    $data = $model->get()->getRowArray();

运行上面的查询会产生错误:未知表“myproject.teams”-即使teams表100%存在并且我在整个项目中都使用它。
我哪里出错了?

kx1ctssn

kx1ctssn1#

出现此错误是因为在查询中没有包含from子句,并且缺少join子句。使用codeigniter,您可以这样做:

$model->select('users.*, teams.*, teams.id as teamId, teams-users.id as teamsUsersId, teams-users.userId as teamsUsersUserId, teams-users.teamId as teamsUsersTeamId');
//$model->where("users.id", $id);
$model->join('teams-users','teams.id = teams-users.teamId','left');
$model->join('users','user.id = teams-users.userId  and users.id='.$id,'left');
$data = $model->get('teams')->getRowArray();

说明:
缺少表用户的联接
要使用左连接吗
将where子句放在相应的连接中(它变成 and )
您错过了from部分,这可以通过将表名放入get()函数或 $model->from('teams'); 也可以看到这个很好的连接解释

相关问题