我正在尝试使用podio-php通过API设置字段值。如果该字段已经非空,则根据the manual制作的以下代码段正常工作:
$item = PodioItem::get_basic( $item_id );
$field = $item->fields["field-name"];
$field->values = "2"; // let's say we have a number filed
$item->save(); // $field->save() also works
但如果该字段为空,则会在保存时出现警告Creating default object from empty value
。没有错误,项目没有变化。这适用于不同类型的字段。我假设,应该从头开始创建一个字段对象,但是没有设法为不同的字段类型找到关于它的信息。
那么,请问,当字段为空时,如何使用podio-php正确设置值?感谢。
答案 0 :(得分:3)
我有同样的问题,发现了这个宝石..
PodioItem::update(210606, array('fields' => array(
"title" => "The API documentation is much more funny",
"business_value" => array('value' => 20000, "currency" => "EUR"),
"due_date" => array('start' => "2011-05-06 11:27:20", "end" => "2012-04-30
10:44:20"),
));
我对其进行了修改,以便我可以更新单个字段。但是这会在没有那个愚蠢错误的情况下更新字段。
$FieldsArray = [];
$FieldsArray['encounter-status'] = "Draft";
$item = PodioItem::update($itemID, array('fields' => $FieldsArray));
答案 1 :(得分:2)
可能有一种更简单的方法,但这是我找到的解决方法。如果该字段不为空,我们只需分配新值。但是如果该字段为空,我们需要创建一个与现有字段同名的相应类型的新字段对象(请参阅下面的列表),并将其添加到字段集合中。旧空字段将替换为新字段。
在这个例子中,我们将设置数字字段:
$field_name = "field-name";
$new_value = 999;
$item = PodioItem::get_basic( $item_id );
$field = $item->fields[$field_name];
if ( count($field->values) ){ // if the field is not empty
$field->values = $new_value;
} else { // if the field is empty
$new_field = new PodioNumberItemField($field_name); // new field with the same(!) name
$new_field->values = $new_value;
$item->fields[] = $new_field; // the new field will replace the exsisting (empty) one
}
$item->save();
其他字段对象类型的构造函数(在models/PodioItemField.php中找到):
PodioTextItemField
PodioEmbedItemField
PodioLocationItemField
PodioDateItemField
PodioContactItemField
PodioAppItemField
PodioCategoryItemField
PodioImageItemField
PodioFileItemField
PodioNumberItemField
PodioProgressItemField
PodioDurationItemField
PodioCalculationItemField
PodioMoneyItemField
PodioPhoneItemField
PodioEmailItemField