У меня есть пустое поле под названием «аккомодация», я пытаюсь добавить массив данных, используя этот код:
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 не очень конкретно описывает способ добавления вложенного поля, поэтому я понятия не имею, что я делаю там неправильно. Надеюсь, что кто-то может помочь мне в этом.
Ты говоришь 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, хотя. Надеюсь это поможет!
Других решений пока нет …