php - Parse.com,无法在 for 循环中使用 query->find() 获取数据
问题描述
我有两个表,分别命名为成分和数量。每个成分都有一个称为数量的关系列,可以包含一个或多个数量对象。
我想要做的是在一个循环中获取所有成分,然后也获取所有这些成分的数量。但是我注意到,当我使用查询来获取金额时,这会大大减慢处理速度,并且我无法获取所有成分的金额(900+),服务器就会超时。
有没有一种方法可以在不进行第二次 for 循环的情况下获取某种成分的所有数量?最终,我想要的是退回所有成分以及它们所拥有的数量。
这是代码
try {
$query = new ParseQuery("Ingredient");
$query->descending("name");
$query->limit(1000);
$results = $query->find();
for ($i = 0; $i < count($results); $i++) {
$object = $results[$i];
$ingredient = new Ingredient($object->getObjectId(), $object->get('name'), $object->get('category'), $object->get('KH'), $object->get('EW'),
$object->get('FE'), $object->get('ALK'), $object->get('amounts')->_encode());
array_push($old_values_array, $ingredient);
$relation = $object->get('amounts');
$query1 = $relation->getQuery();
$results1 = $query1->find();
for ($j = 0; $j < count($results1); $j++) {
//echo "Got here in loop 2";
$object2 = $results1[$j];
$id = $object2->getObjectId();
$name = $object2->get('name');
$grams = $object2->get('grams');
$amount = new Amount($id, $name, $grams);
array_push($amounts_array, $amount);
}
}
解决方案
ingredients
一种解决方法是在您的Amount
解析类中添加一个指针。因此,您可以一次查询与该成分相关的所有“数量”,并且只需一次查询。
-- 如果您不知道一种成分的最大数量,您可以先计算并再次查询以找到它们。
$ingredient = ...;
$query= new ParseQuery("Ingredient")->equalsTo('ingredient',$ingredient);
$amountCount=$query->count();
$amounts=$query->limit($amountCount)->find();
如果我的 PHP 语法可能有误,我们深表歉意。
推荐阅读
- jquery - 取消选中单击其他复选框时选中的所有复选框不起作用
- python - 干扰代码的注释块/缩进
- java - 在静态 void main 中调用方法
- python - 具有 O(1) 随机删除和添加的数据结构,用于改组生成器顺序
- c++ - 在c ++中通过引用传递指向对象的指针
- network-programming - 如何在网络编程中管理计时器任务这样的心跳?
- c# - 无法更改列表视图 xamarin.forms 中的字体大小
- ruby-on-rails - 如何判断 Rails 异常将呈现哪个错误状态代码?
- autodesk-forge - 伪造查看器错误
- amazon-web-services - 将 taskRoleArn 附加到 AWS Fargate 不起作用