QuickBase foreach вставка
У меня проблема с использованием Quickbase
API для выполнения следующих действий:
SELECT 1, 2, 3 FROM table AA that has column BB = 1
foreach record {
Insert 1, 2, 3 into table ZZ.
}
function add_children($opportunity_id) {
global $config;
$qbc = new QuickBase($_SESSION['qb_username'] ,
$_SESSION['qb_password'],
true,
$config['AA'],
$config['debug'],
$config['app_token']);
$xml = $qbc->do_query("{'" . $config['AA'] . "'.EX.''}", 0, 0, 'a', 0, '', '');
$records = array();
foreach($xml->record as $record) {
$r = array();
$r['record_id'] = $record->record_id_;
$r['account_number'] = $record->account_number;
$records[] = $r;
$xml = $qbc->add_record($records[]);
}
}
1 ответ
Во-первых, я предполагаю, что вы используете этот PHP SDK от QuickbaseAdmirer https://github.com/QuickbaseAdmirer/QuickBase-PHP-SDK. Есть несколько потенциальных проблем с вашим кодом.
Дважды проверьте, что ваш конструктор правильный. Если вы не изменили его, конструктор Quickbase в SDK (опять же, который я предполагаю, что вы используете) принимает имя пользователя, пароль, xml, идентификатор базы данных, а затем токен в указанном порядке. Какая бы ни была ценность в
$config['debug']
может быть взята в качестве токена и значение$config['app_token']
может быть принято как ваше царство. Также,$config['AA']
в конструкторе должна использоваться строка случайных видимых символов, таких как "bbqn1y5qv". Вот конструктор в SDK для справки:public function __construct($un, $pw, $usexml = true, $db = '', $token = '', $realm = '', $hours = '')
Ваш запрос
$xml = $qbc->do_query("{'" . $config['AA'] . "'.EX.''}", 0, 0, 'a', 0, '', '');
не возвращает никаких записей, потому что$config['AA']
используется как ваш DBID (в конструкторе), так и как идентификатор вашего поля в запросе. DBID должен быть строкой, а ID поля должен быть целым числом, которое соответствует полю, к которому вы делаете запрос. Например, если вы хотите вернуть созданные сегодня записи, ваш запрос будет'{1.IR.today}'
потому что 1 всегда ID поля для даты создания. Он также не возвращает никаких записей, поскольку SDK требует, чтобы запросы передавались в виде массива массивов. Итак, мой запрос, созданный сегодня, должен быть переписан как:$query= array( array( 'fid' => '1', 'ev' => 'IR'), 'cri' => 'today'), );
Вам также нужно будет передать строку значений, разделенных точками, параметру clist метода или оставить его пустым для значений по умолчанию в таблице. Например, если бы я хотел получить дату создания и идентификатор записи для всех записей в этой таблице, отсортированных по возрастанию по дате, я бы использовал это:
$query= array( array( 'fid' => '3', 'ev' => 'GT'), 'cri' => '0'), ); $xml = $qbc->do_query($query, '', '', '1.3', '1', '', 'sortorder-A');
Вы можете прочитать больше об API Quickbase и, в частности, о do_query, здесь http://www.quickbase.com/api-guide/index.html
Вызов API add record принимает пары идентификаторов полей и значений. SDK обрабатывает это, беря массив массивов с парами 'fid' и 'value'. Предполагая, что вы хотите поставить значение
$record->record_id_
в поле № 37 и$record->account_number
в поле #30 ваш код должен выглядеть так:foreach($xml->record as $record) { $records= array( array( 'fid' => '37', //Whatever field you want to store the value to 'value' => $record->record_id_), array( 'fid' => '30', 'value' => $record->account_number), ); $xml = $qbc->add_record($records); }
Бросить в
print_r($xml);
в конце, и вы можете увидеть любой ответ от QuickBase для отладки. Вы должны получить что-то вроде этого для успеха:SimpleXMLElement Object ( [action] => API_AddRecord [errcode] => 0 [errtext] => No error [rid] => 81 [update_id] => 1436476140453 )
То, как представлен ваш код, может не дать ожидаемых результатов. Ваш запрос do и добавление вызовов метода записи выполняются для одной и той же таблицы, и это обычно не то, что кто-то хотел бы. Обычно цель состоит в том, чтобы выполнить запрос do для одной таблицы, а затем использовать эти данные для добавления записей в другую таблицу. Если это так, вам нужно изменить идентификатор базы данных в вашем
$qbc
объект, прежде чем вы преформуете запись добавления вызова. Это достаточно легко сделать с$qbc->set_database_table('DBID');
где DBID - это идентификатор целевой таблицы (которая должна быть строкой случайных видимых символов, таких как "bbqn1y5qv").
Удачи!