我有一个叫做#34;住宿"的空场。我尝试使用以下代码附加数据数组:
r\table('xxx')->get($_POST['id'])->update(['accommodations' =>
r\row('accommodations')->append(['name' => $_POST['name'] , 'checkin' =>
$checkin , 'checkout' => $checkout , 'status' => 'rq'])])->run($conn);
但到目前为止还没有任何更新。我检查了所有变量,一切都很好(ID,姓名,签到和结帐日期......),我也没有任何php错误。 php rql api manual对于追加嵌套字段的方式不是很具体,所以我不知道我在那里做错了什么。希望有人可以帮助我。
答案 0 :(得分:0)
您说accomodations
字段为空:如果它不是数组类型(例如null
),或者如果它不存在,则查询将被拒绝。
您可以使用branch
来测试所有案例:
r\table('xxx')->get($_POST['id'])->update(function($doc){
return [
'accomodations' => r\branch(
// test the field does not exist or is not an array
$doc->hasFields('accomodations')->not()->or($doc('accomodations')->typeOf()->ne('ARRAY')),
// test true: absent or not an array --> override the value
[
[
'name' => $_POST['name'],
'checkin' => $checkin ,
'checkout' => $checkout ,
'status' => 'rq'
]
],
// test false: exists as an array --> append
$doc('accomodations')->append([
'name' => $_POST['name'],
'checkin' => $checkin ,
'checkout' => $checkout ,
'status' => 'rq'
])
)
];
})->run($conn);
虽然没有使用PHP连接器测试过。希望这有帮助!