rails mysql查询_Rails写这个Mysql查询的方式

我有一个Mysql查询是这样的:

actors_to_delete = find_by_sql("SELECT * FROM `dvd_role` a

LEFT JOIN `dvd_actor2role` b ON a.id = b.`roleId`

LEFT JOIN `dvd_actor` c ON b.`actorId` = c.`id`

WHERE role LIKE '%uncredited%'

GROUP BY c.id")我写过Railsy的方式是这样的:

actors_to_delete = Role.joins("LEFT JOIN `dvd_actor2role` ON dvd_role.id = dvd_actor2role.`roleId`").joins("LEFT JOIN `dvd_actor` ON dvd_actor2role.`actorId` = dvd_actor.`id`").where("dvd_role.role LIKE '%uncredited%'").group("dvd_actor.id")我想知道的是(除了这两个查询之间的区别是什么之外,它们都做同样的事情,所以为什么要使用Railsy方式而不是直接使用sql方式?)是如何使用已经在Rails中建立的关系。

如果我尝试做这样的事情:

Actor.actor2role.role.where("role LIKE ?", '%uncredited%')我会得到未定义的方法actor2role,因为即使关系已经在Rails中建立,它们也适用于Actor的实例,而不是模型本身。

所以,最后,只是想知道最好的方法是什么。来自PHP和Mysql我倾向于用sql方式写出很多这些东西,并试图改变我的邪恶方式:)

编辑

我也有另外一个问题,那就是在sql查询中我从所有3个表中获取所有信息,Rails的方式只给出了dvd_role表。

我怎样才能从另外两个表中获取数据?

我可以通过在开头添加.select(“*”)来完成后者。这是适当的方式:

actors_to_delete = Role.select("*").joins("LEFT JOIN `dvd_actor2role` ON dvd_role.id = dvd_actor2role.`roleId`").joins("LEFT JOIN `dvd_actor` ON dvd_actor2role.`actorId` = dvd_actor.`id`").where("dvd_role.role LIKE '%uncredited%'").group("dvd_actor.id")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值