Я выполняю задание cron на моем сервере, на котором выполняется PHP для сценария, который должен удалить все строки из определенной диаграммы в моей базе данных Parse. Я использую новую официальную библиотеку Parse PHP.
До сих пор я пробовал два разных подхода, но оба подхода удаляют только 60% строк.
Подход 1:
$query = new ParseQuery("Chart");
$query->limit(1000);
$results = $query->find();
for ($i = 0; $i < count($results); $i++) {
$object = $results[$i];
$object->destroy();
}
$query2 = new ParseQuery("Chart");
$query2->limit(1000);
$results = $query2->find();
if (count($results) != 0) {
deleteRows();
}
echo "Finished a loop";
}
Подход 2:
$query3 = new ParseQuery("Chart");
$query3->each(function($obj) {
$obj->destroy();
});
Есть ли лучший способ сделать это? Я думаю, что причиной могут быть две вещи, но я не уверен, что сервер ограничивает время выполнения скрипта PHP, или если есть более 1000 строк, мне нужно будет запустить процесс более одного раза?
Я использую Parse с PHP для своих веб-приложений.
Этот пример здесь может помочь:
require 'vendor/autoload.php';
use Parse\ParseClient;
use Parse\ParseQuery;
use Parse\ParseObject;
use Parse\ParseException;
$candidato = htmlspecialchars($_REQUEST['username']);
$candidato = htmlspecialchars($_REQUEST['post']);
if($candidato && $username){
try{
ParseClient::initialize($app_id, $rest_key, $master_key);
$query = new ParseQuery('like');
$query->equalTo("user", $username);
$query->equalTo("post", $post);
$res = $query->find();
$object;
for ($i = 0; $i < count($res); $i++) {
$object = $res[$i];
}
$object->destroy();
echo "object destroyed succesfully";
} catch (ParseException $ex) {
echo $ex->getMessage();
}
}else{
echo "not enough params";
}
Дайте мне знать, если это сработало для вас
С уважением
Вы можете использовать флаг, чтобы увидеть, есть ли еще результаты, и пока этот флаг установлен, повторите цикл.
$not_finished = true;
while ($not_finished){
$query = new ParseQuery("Chart");
$query->limit(1000);
$results = $query->find();
for ($i = 0; $i < count($results); $i++) {
$object = $results[$i];
$object->destroy();
}
$query2 = new ParseQuery("Chart");
$query2->limit(1000);
$results = $query2->find();
if (count($results) != 0) {
deleteRows();
}
echo "Finished a loop";
}
$query = new ParseQuery("Chart");
$result = $query->find();
if (count($result) > 0){
$not_finished = true;
}
else{
$not_finished = false;
}
}