rethinkdb php rql добавить к вложенному полю

У меня есть пустое поле под названием «аккомодация», я пытаюсь добавить массив данных, используя этот код:

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 не очень конкретно описывает способ добавления вложенного поля, поэтому я понятия не имею, что я делаю там неправильно. Надеюсь, что кто-то может помочь мне в этом.

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, хотя. Надеюсь это поможет!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]