Это документ перед редактированием.
{
"EstadoPedido" : 10,
"IdPedido" : 3113,
"Meta" : {
"DataAlt" : "2018-05-25 15:33:21",
"DataCri" : "2018-05-25 15:28:51",
"IdUserAlt" : "83",
"IdUserCri" : 83,
"UserAlt" : "AAA",
"UserCri" : "AAA",
"sDataAlt" : ISODate("2018-05-25T15:33:21.000Z"),
"sDataCri" : ISODate("2018-05-25T15:28:51.000Z")
},
}
А после редактирования поле "EstadoPedido" должно быть 20 или 30:
{
"EstadoPedido" : 30,
"IdPedido" : 3113,
"Meta" : {
"DataAlt" : "2018-05-25 15:33:21",
"DataCri" : "2018-05-25 15:28:51",
"IdUserAlt" : "83",
"IdUserCri" : 83,
"UserAlt" : "AAA",
"UserCri" : "AAA",
"sDataAlt" : ISODate("2018-05-25T15:33:21.000Z"),
"sDataCri" : ISODate("2018-05-25T15:28:51.000Z")
},
}
EDIT //
Вот как я вызываю функцию и передаю параметры:
$onapp->put('/pedido/setAnulado/:idPedido', function($idpedido){
$P = new Pedido();
$R = $P->setAnulado($idpedido);
$M_Ped = new \Oncargo\MongoApi\Pedido();
$ret = $M_Ped->setEstado($idpedido, 30);
echo json_encode($R);
});
$ P = new Pedido () - это класс для сохранения объекта на SQL Server с помощью Propelframework.
$ M_Ped = new \ Oncargo \ MongoApi \ Pedido () - это объект класса Mongo для сохранения.
И этот $ M_Ped-> setEstado переходит сюда:
public function setEstado($idPedido, $estado) {
$this->IdPedido = $idPedido;
$this->Estado = $estado;
$r = $this->_mudaEstado($idPedido, $estado);
return $r;
}
, который затем возвращается к обновлению, и полная функция:
private function _mudaEstado($idPedido, $estadoPedido) {
$userNome = $this->userData['Nome'];
$c = $this->db->selectCollection('pedidos');
if (date('I')) { $_dst = 3600; } else { $_dst = 0; }
$DataAlt = date('Y-m-d H:i:s');
$sDataAlt = new \MongoDate(strtotime($DataAlt) + $_dst);
$criteria = array('IdPedido' => $idPedido);
$update = array(
'$set' => array(
'EstadoPedido' => $estadoPedido,
'Meta.IdUserAlt' => $this->userData['IdUser'],
'Meta.UserAlt' => $userNome,
'Meta.DataAlt' => $DataAlt,
'Meta.sDataAlt' => $sDataAlt
)
);
$r = $c->update($criteria, $update);
return $r;
}
EDIT 2 //
Я также сделал print_r ($ update) для обоих сценариев, 20 (который работает) и 30 (который не работает) и данные одинаковы:
Вывод рабочего бита:
Array
(
[$set] => Array
(
[EstadoPedido] => 20
[Meta.IdUserAlt] => 83
[Meta.UserAlt] => AAA
[Meta.DataAlt] => 2018-05-28 14:26:07
[Meta.sDataAlt] => MongoDate Object
(
[sec] => 1527517567
[usec] => 0
)
)
)
И это выводпеременная нерабочего обновления:
Array
(
[$set] => Array
(
[EstadoPedido] => 30
[Meta.IdUserAlt] => 83
[Meta.UserAlt] => AAA
[Meta.DataAlt] => 2018-05-28 14:28:21
[Meta.sDataAlt] => MongoDate Object
(
[sec] => 1527517701
[usec] => 0
)
)
)
Как видите, оба запроса одинаковы, один работает, а другой нет.