【问题标题】:Get newly created Podio-PHP item id from PodioItem:Create从 PodioItem:Create 获取新创建的 Podio-PHP 项目 id
【发布时间】:2014-09-08 10:08:56
【问题描述】:

我正在尝试通过一种形式在四个应用程序应用程序中创建新项目 - 一些项目将成为应用程序引用。例如,我首先创建一个实体项,然后创建一个人员项,并通过人员应用程序中的应用程序引用字段将新实体与人员相关联。然后创建一个项目并将人员和实体与项目相关联。在我升级到最新的 Podio-PHP 之前,这一直是成功的。过去,当新创建的项目将 item_id 作为整数返回时,我可以在创建下一个项目之前将其作为应用引用传递到字段中。

我一直在尝试将 item_id 获取为整数,以便我可以这样做,但我一直为 null。无论如何,鉴于 Podio 现在将新创建的项目作为对象返回的方式,我应该尝试不同的方式吗?

$app_id = 1234567;

$fields = new PodioItemFieldCollection(array(
   ...I am defining external_id and values...
));

$item = new PodioItem(array(
  'app' => new PodioApp($app_id),
  'fields' => $fields,
));

if( $files ){
  $item->files = new PodioCollection($files);
};

$item->save();
$new_id = $item->item_id;
return $new_id;

$new_id 是我尝试存储整数的位置,以便我可以将它作为应用引用传递给下一个项目创建。

【问题讨论】:

    标签: podio


    【解决方案1】:

    在 podio-php 中并没有很好地处理它(尽管从永远以来它都被处理得同样不好)。如果您查看save 方法,您可以看到发生了什么:https://github.com/podio/podio-php/blob/master/models/PodioItem.php#L58-L72

    public function save($options = array()) {
      $json_attributes = $this->as_json_without_readonly_fields();
    
      if ($this->id) {
        return self::update($this->id, $json_attributes, $options);
      }
      else {
        if ($this->app && $this->app->id) {
          return self::create($this->app->id, $json_attributes, $options);
        }
        else {
          throw new PodioMissingRelationshipError('{"error_description":"Item is missing relationship to app"}', null, null);
        }
      }
    }
    

    save() 不会将新的 item_id 分配给对象本身。这是一个错误,如果您在 https://github.com/podio/podio-php/issues 上创建了一个问题会很好,以便可以修复它。

    现在您可以看到save() 返回的结果与静态create 方法相同。所以你的最后三行需要替换为:

    $new_item_placeholder = $item->save();
    $item->item_id = $new_item_placeholder->item_id;
    return $item->item_id;
    

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多