我有一个带有引用字段的项目到另一个应用程序。呼叫具有指定的客户端。
我使用此库:http://podio.github.io/podio-php/
我遵循了这篇文章:http://podio.github.io/podio-php/fields/
我想通过更改引用其他应用的字段的 item_id 来更新现有项目。 item_id 已存在于其他应用中。
这是我尝试的(当触发Webhook时会发生这种情况):
$item = PodioItem::get($_POST['item_id']);
$item->fields['client']->values = array(
array('item_id' => $id_client)
);
$item->save(array(
'hook' => false,
'silent' => true
));
和
$item = PodioItem::get($_POST['item_id']);
$item->fields['client']->values = array('item_id' => $id_client);
$item->save(array(
'hook' => false,
'silent' => true
));
其中'client'是字段的外部id,$ id_client是整数。 这是我得到的错误:
[18-Aug-2014 17:33:30 UTC] PHP Notice: Indirect modification of overloaded property PodioItem::$field has no effect in /home1/magikweb/public_html/dev/magik-net/helpdesk/webhook/call.php on line 66
[18-Aug-2014 17:33:30 UTC] PHP Warning: Creating default object from empty value in /home1/magikweb/public_html/dev/magik-net/helpdesk/webhook/call.php on line 66
如果有人能向我解释为什么这不起作用我真的很感激。提供的文件不清楚该主题。
谢谢!
解
我让它以这种方式工作,归功于安德烈亚斯:
if(!isset($item->fields['client']->values[0]->item_id)){
$item->fields['client'] = new PodioAppItemField();
$item->fields['client']->values = array(
array('item_id' => $id_client)
);
$item->save(array(
'hook' => false,
'silent' => true
));
}
答案 0 :(得分:3)
您收到此错误的原因是client
字段尚未存在于您的商品中。因此,您尝试将values
设置为不存在的内容。
你需要做一些事情(未经测试,但应该有效):
$item = PodioItem::get($_POST['item_id']);
if (!isset($item->fields['client'])) {
$item->fields['client'] = new PodioAppItemField();
}
$item->fields['client']->values = array(
array('item_id' => $id_client)
);
$item->save(array(
'hook' => false,
'silent' => true
));
当你从Podio获得一个项目时,你不会获得应用程序中的所有字段,只有那些具有该特定项目值的字段。因此,在尝试设置值之前,您必须检查您的特定字段是否存在。