我无法急切地加载子类的多态父类。include 语句似乎没有任何区别。
儿童班:
@BelongsToPolymorphic(
parents = {ParentRequest.class},
typeLabels = {"parent_request"})
public class Child extends Model {
}
家长班:
public class ParentRequest extends Model {
}
应该急切返回子+父的查询:
List<Child> children = Child.where("... limit 500").include(ParentRequest.class);
children.size(); //this gives me 500
children.cachedParents.size(); //this gives me 0;
最终,我试图加快以下操作:
for (Child child : children) {
ParentRequest pr = child.parent();
// lots of pr.getString("parent_field");
...
}
我已经对这些操作进行了基准测试,无论是否在 Child.where() 方法上使用 .include(ParentRequest.class) ,上述操作似乎都需要大约 67 毫秒。
非常感谢任何见解或帮助。
注意:我知道孩子只有一个父母。在不久的将来,它将有几个。
编辑: 由于某些原因,反转查询产生了更快的结果。也就是说,如果我搜索 ParentRequest 并包含 Child,则操作会快得多,而不是查找 Children 并包含 ParentRequest。请注意,我专门做了一个 findBySql 来将结果中的子表连接到 parent_request 表。下面我留下了查询的细节。
List<ParentRequest> parents = ParentRequest.findBySQL("SELECT child.*, parent_requests.* " +
"FROM child JOIN parent_requests ON child.parent_id=parent_requests.id WHERE " +
"RAND()<=? AND (child.metersToA BETWEEN ? AND ?) " +
" AND (child.metersToB BETWEEN ? AND ?) limit ?",
decimation_value,
minDistanceToA, maxDistanceToA ,
minDistanceToB, maxDistanceToB,
MAX_POINTS).include(Child.class);