2

我有一个项目引用了另一个应用程序的字段。呼叫具有分配的客户端。

我使用这个库: 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

如果有人可以向我解释为什么这不起作用,我将不胜感激。提供的文档在该主题上尚不清楚。

谢谢!

解决方案

我让它以这种方式工作,感谢 Andreas:

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
    ));
}
4

1 回答 1

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

于 2014-08-20T22:47:08.780 回答