将SQL查询转换为具有多对多关系的Rails查询,最佳实践是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将SQL查询转换为具有多对多关系的Rails查询,最佳实践是什么?相关的知识,希望对你有一定的参考价值。

嗨,这是我的数据模型:

enter image description here

并且我想将此查询转换为activeRecord API

select c.id, c.name, c.phone, c.created_at,c.updated_at,s.status
from contacts c,contacts_lists cl, contactstatuses s
where cl.list_id = ? and s.company_id = ? and c.id = cl.contact_id and c.id = s.contact_id

什么是最好的方法? ....也是这里的最佳实践是什么?,运行sql plain还是使用activeRecord API]

答案
select c.id, c.name, c.phone, c.created_at, c.updated_at, s.status from contacts c JOINS contacts_lists cl ON cl.contact_id = c.id JOINS contactstatuses s ON s.contact_id = c.id where cl.list_id = ? and s.company_id = ?;

使用以下代码:

# I filled the id values (questionmarks) with a 1
Contact.select(:id, :name, :phone, :created_at, :updated_at, Contactstatus.arel_table[:status]).joins(:contacts_lists, :contactstatuses).where(contacts_lists:  list_id: 1 , contactstatuses:  company_id: 1 )

以上是关于将SQL查询转换为具有多对多关系的Rails查询,最佳实践是什么?的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中查询用户的多对多关系

用户-角色多对多查询sql

NHibernate教程(11)--多对多关联查询

sql 复杂查询 以teacher student course多对多关系为例

MySQL选择多对多的位置

OctoberCMS - 具有多对多关系的模型查询