Как получить строковое значение MongoID с помощью PHP?

После выполнения вставки я хочу передать объект клиенту с помощью json_encode(). Проблема в том, что значение _id не включено.

$widget = array('text' => 'Some text');

$this->mongo->db->insert($widget);


If I echo $widget['_id'] the string value gets displays on the screen, but I want to do something like this:

$widget['widgetId'] = $widget['_id']->id;


So I can do json_encode() and include the widget id:

echo json_encode($widget);

person SomethingOn    schedule 22.10.2011    source источник


Ответы (5)


Поверьте, это то, что вам нужно.

$widget['_id']->{'$id'};

Что-то вроде этого.

$widget = array('text' => 'Some text');
$this->mongo->db->insert($widget);
$widget['widgetId'] = $widget['_id']->{'$id'};
echo json_encode($widget);
person John Pancoast    schedule 28.10.2011
comment
Ссылка здесь: php.net/manual/en/class.mongoid.php . Я бы предпочел (строковый) тип ниже себя, но на момент вопроса я использовал метод, описанный в документах. - person John Pancoast; 19.11.2014

Вы также можете использовать:

(string)$widget['_id']
person meltix    schedule 14.01.2013

правильный способ - использовать ObjectId из MongoDB:

function getMongodbIDString($objectId){
    $objectId = new \MongoDB\BSON\ObjectId($objectId);
    return $objectId->jsonSerialize()['$oid'];
}

и не приводить объектный идентификатор, например (string) $row['_id'] или $row->_id->{'$oid'}

person Rafael Guimarães    schedule 25.09.2019
comment
спасибо за предоставление этого кода. никакой другой код не работает, кроме этого... один раз большое спасибо. - person Dhanunjaya; 30.10.2019
comment
@Dhanunjaya, хорошо, попробуй использовать Doctrine ODM, он справляется со всеми этими вещами. - person Rafael Guimarães; 30.10.2019

Я использовал нечто подобное:

(string)$widget->_id
person Abilash    schedule 09.07.2013
comment
Большое спасибо :) у меня все работает нормально... $filter=['_id' =› $row-›_id]; и $filter вы можете передать функции deleteOne и findOne - person Venkatgreat309; 11.03.2020

Я использовал нечто подобное, если объект:

$widget->_id->{'$oid'}

or

(string)$widget->_id

или массив:

$widget['id']->{'$oid'}
(string)$widget['_id']
person Mahdi Bagheri    schedule 06.02.2018