Parse.com не может получить данные, используя query-> find () в цикле for - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть две таблицы, названные Ingredient и Amount. Каждый ингредиент имеет столбец отношений, называемый суммами, который может содержать один или несколько объектов количества.

То, что я пытаюсь сделать, это собрать все ингредиенты в цикле, а затем получить суммы для всех этих ингредиентов. Однако я заметил, что когда я использую запрос для получения сумм, то это сильно замедляет процесс, и я не могу получить суммы для всех ингредиентов (900+), сервер просто отключается.

Есть ли способ, которым я могу получить все суммы для определенного ингредиента, не делая ни секунды для цикла? В конечном итоге я хотел бы вернуть все ингредиенты вместе с их количеством.

Вот код

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);  
     }   

}

1 Ответ

0 голосов
/ 18 сентября 2018

Один из обходных путей - добавить указатель на ingredients в вашем Amount классе разбора. Следовательно, вы можете запросить все «суммы», связанные с этими ингредиентами, сразу и одним запросом.

- Если вы не знаете максимального количества ингредиентов, вы можете сначала подсчитать и сделать еще один запрос, чтобы найти их.

$ingredient = ...;

$query= new ParseQuery("Ingredient")->equalsTo('ingredient',$ingredient);

$amountCount=$query->count();
$amounts=$query->limit($amountCount)->find();

извиняюсь за неправильный синтаксис PHP.

...