Adonis.js 关系

Posted

技术标签:

【中文标题】Adonis.js 关系【英文标题】:Adonis.js Relationships 【发布时间】:2020-03-04 13:11:00 【问题描述】:

我有这些表:公司、分支机构、用户、users_branches

每个分支机构都与一个公司相关联。用户可以链接到在 users_branches 数据透视表

中捕获的分支

company 的 index 和 show 方法中,我只需要显示为用户有权访问的公司,即仅显示为链接到他注册的任何分支机构的公司.你能帮帮我吗?

我今天拥有的是这个,非常基本的,并且列出了所有内容:

async index () 
  const companies = await Company.all()
  return companies


async show ( params ) 
  const company = await Company.findOrFail(params.id)

  await company.load('branches')

  return company

我尝试了另外两种方法:

async index ( auth ) 
  const  user  = auth

  return user.branches().company().fetch()

async index () 
  const companies = await Company.query()
    .whereHas('branches', branchesQuery => 
      branchesQuery.wherePivot('user_id', 1)
    )
    .fetch()

  return companies

但它不起作用

【问题讨论】:

【参考方案1】:

这可能有效,(如果出现任何错误,您可能还需要将 'user_id' 更改为 'id',同时启用 DEBUG 并观察查询

const companies = await Company.query()
.whereHas('branches', branchesQuery => 
  branchesQuery.whereHas('users', uq => 
    uq.where('user_id', 1)
  )
)
.fetch()

【讨论】:

以上是关于Adonis.js 关系的主要内容,如果未能解决你的问题,请参考以下文章

Dockerize adonis.js + mysql

使用 ORM 在 adonis JS 中选择特定列

如何将大文件加载到分块的 Adonis JS 中?

Vue.js + REST api 中的身份验证流程

对象关系之聚合关系

集合论:关系