Быстрая база delete_record

Я не могу заставить работать функцию delete_record. Вот код delete_record, который я сейчас использую:

$qb->db_id = $myQbTables["table1"]; //using table 1 now

$queries = array( //this is the where clause now for the delete query
  array(
    'fid'  => '12',
    'ev'   => 'EX',
    'cri'  => '1175'
  ),
  array(
    'fid'  => '8',
    'ev'   => 'EX',
    'cri'  => $Child_ID
  )
);

$results = $qb->do_query($queries, '', '', 'a', '1', 'structured', 'sortorder-A'); //get all results
if($results->errCode !== 0) {
  echo $results->errTxt;
}

print_r($results);

foreach($results->table->records->record as $record){ //getting results of delete query
$Deletevar = $record->f[11];    

$deleted = $qb->delete_record($Deletevar); //deleting results

print_r($deleted);  
}

Я знаю, что 'cri' соответствует вещам в моей быстрой базе, но я не могу использовать f[3] (идентификатор записи), чтобы удалить его!

НОТА

Я нашел главную проблему, которую я имел! Если вы делаете вызовы API с помощью QB API, удаляйте записи и удаляйте записи, не включая токен приложения!! Пожалуйста, используйте следующий код для обновления функции delete_records!!!!

public function delete_record($rid) {
if($this->xml) {
                        $xml_packet = new SimpleXMLElement('<qdbapi></qdbapi>');
                        $xml_packet->addChild('rid',$rid);
                        $xml_packet->addChild('ticket',$this->ticket);
                        $xml_packet->addChild('apptoken',$this->app_token);
                        $xml_packet = $xml_packet->asXML();                        

                        $response = $this->transmit($xml_packet, 'API_DeleteRecord');
                }
                else {
                      $url_string = $this->qb_ssl . $this->db_id. "?act=API_DeleteRecord&ticket=". $this->ticket
                                        ."&apptoken=".$this->app_token."&rid=".$rid;

                        $response = $this->transmit($url_string);
                }

return $response;          
}

1 ответ

Решение

Я думаю, что вы можете что-то упустить в своем запросе. Если вы пытаетесь получить список записей, где поле 12 равно 1157, а поле 8 равно $Child_ID вам нужно будет добавить AND в ваш запрос. При использовании API в URL запрос будет &query={12.EX.1175}AND{8.EX.77} если, например, дочерний идентификатор был 77. Для этого в PHP SDK для Quickbase вы добавляете 'ao' => 'AND' для всех массивов, следующих за первым массивом запросов. Попробуйте обновить массив $ запросов к этому:

$queries = array( //this is the where clause now for the delete query
                array(
                    'fid'  => '12',
                    'ev'   => 'EX',
                    'cri'  => '1175'
                ),
                array(
                    'ao'   => 'AND',  // Saying that 12.EX.1175 AND 8.EX.$Child_ID
                    'fid'  => '8',
                    'ev'   => 'EX',
                    'cri'  => $Child_ID
                )
);

Мои навыки PHP не особенно хороши, но вам нужно сделать немного больше, чтобы получить идентификатор записи #. В оригинальном коде я думаю, что $record->f[3] просто вернусь к SimpleXMLObject для третьего поля в массиве. Это не обязательно будет ID поля 3 (ID записи). Вы можете либо отказаться от использования структурированного формата (и изменить весь код для соответствия), либо добавить цикл, который проходит через все поля и удаляет его, когда он достигает поля с идентификатором 3:

foreach($results->table->records->record as $record){ //getting results of delete query
    //Loop through all fields to find id 3
    foreach($record->f as $field){
        if($field['id'] == "3"){
            $Deletevar = $field['id'];
            $deleted = $qb->delete_record($Deletevar); //deleting result
            print_r($deleted);
            break;  //Stops this loop since FID 3 was found
        }
    }
}

Некоторые замечания по производительности: если вы не используете какие-либо другие поля, вы можете настроить свой запрос так, чтобы он возвращал только идентификаторы записей, передавая значение "3". Также каждый delete_record() это отдельный вызов API. Есть еще один метод purge_records это позволяет вам передавать запрос, а Quickbase удаляет все записи, соответствующие вашему запросу. Вы можете посмотреть на использование purge_records() потому что вы можете использовать его вместо вашего do_query() и избегайте всех петель. Он использует меньше ваших ресурсов и Quickbase для обработки, а также.

Другие вопросы по тегам