如何使用多态关联

我什么时候能得到父母的ID的许多一对多的关系表site_sections有以下栏目:如何使用多态关联

id 

site_id

section_id

这是用来sectionssites表之间的连接表。所以一个网站有很多部分和一个部分可在许多网站。 Sites表具有以下列:

id 

store_number

sites_sections表是与parameters表多态性相关联地使用。

我想找到它的store_number对应网站的栏目特定网站的所有参数。是否有可能在site_settings.id数组通过使用IN子句SQL中,这样的事情:

Parameter.where("parent_id IN (" + [1, 2, 3, 4] + ") and parent_type ='com.models.SiteSection'"); 

其中[1, 2, 3, 4]应该是一组ID从sites_sections表或有更好的解决方案吗?

回答:

你的解决方案是正确的:

Site aSite = Site.findFirst("store_number=?", STORE_NUMBER); 

List<SiteSection> siteSections= SiteSection.where("site_id=?", aSite.getId()).include(Parameter.class);

for (SiteSection siteSection : siteSections) {

List<Parameter> siteParams = siteSection.getAll(Parameter.class);

for (Parameter siteParam : siteParams) { ... }

}

此外,通过使用include(),你也避免了N + 1问题:http://javalite.io/lazy_and_eager#improve-efficiency-with-eager-loading

但是可以有一个陷阱。如果您有大量的参数,那么您将使用大量内存,因为include()会立即将所有结果加载到堆中。如果结果集相对较小,则通过运行单个查询节省资源。如果结果集很大,则会浪费堆空间。

见文档:LazyList#include()

边注:使用aSite.getId()aSite.getLongId()代替aSite.get("id")

以上是 如何使用多态关联 的全部内容, 来源链接: utcz.com/qa/262483.html

回到顶部