无法更新参考应用字段

时间:2014-08-18 17:44:47

标签: php api podio

我有一个带有引用字段的项目到另一个应用程序。呼叫具有指定的客户端。

我使用此库: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
    ));
}

1 个答案:

答案 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获得一个项目时,你不会获得应用程序中的所有字段,只有那些具有该特定项目值的字段。因此,在尝试设置值之前,您必须检查您的特定字段是否存在。