rethinkdb php rql追加到嵌套字段

时间:2016-11-26 16:56:59

标签: php rethinkdb

我有一个叫做#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对于追加嵌套字段的方式不是很具体,所以我不知道我在那里做错了什么。希望有人可以帮助我。

1 个答案:

答案 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连接器测试过。希望这有帮助!