Как правильно конвертировать MongoDB BSON в PHP Object

Я надеюсь, что вы, ребята, можете помочь мне с этим:

Перво-наперво — я использую следующую версию / библиотеки:

Я пытаюсь преобразовать массивы BSON, которые я получаю из базы данных для работы в моем проекте.

Как я понял, одна из больших возможностей MongoDB — иметь разные организованные данные в одной коллекции.
Как в этом примере (где только один объект имеет тег «description»:

Документ JSON:

{
enumbers ":[ {
"id": "84",
"enumber": "E 472 b",
"name": "Milchs\u00e4ureester von Mono- und Diglyceriden von Speisefetts\u00e4uren"}, {
"id": "198",
"enumber": "E 407",
"name": "Carrageen",
"description": "Testdescription",
}, {
"id": "293",
"enumber": "E 941",
"name": "Stickstoff"}]
}

Я обращаюсь к базе данных с помощью следующего кода:

$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
$collection = new MongoDB\Collection($manager, "test", "items");
$document = $collection->findOne(["id" => '5']);
$product= new Product($document);

Работает хорошо, пока здесь.

use MongoDB\Model\BSONArray;
use MongoDB\Model\BSONDocument;
class Product
public function __construct(BSONDocument $data)
{foreach ($data as $part){
try{
$this->setId($part->id);
$this->setEnumber($part->id);
$this->setName($part->name);
--------------------------------------
$this->setDescription($part->description);
--------------------------------------
}catch (\Exception $e){
echo $e;
}

}

echo "-------------------------------------------------".PHP_EOL;

}

Теперь «$ this-> setDescription ($ part-> description);» Исключение:

ErrorException: Trying to get property of non-object

Где тег «описание» не определен.

На самом деле я надеялся, что он вернется к нулю там, где его нет.

Как правильно отловить, что некоторые наборы данных могут иметь или не иметь этот тег?

Надеюсь, вы можете помочь мне & Спасибо за прочтение 🙂

1

Решение

Я обнаружил, что я пытался получить доступ к одному слою «слишком глубоко» в моей функции.
Когда я пытался получить доступ

$this->setDescription($data->description);

я мог бы проверить, было ли это установлено:

if (isset($data->name)) $this->setName($data->name);

работает.

Я думал, что попробовал это уже безрезультатно — но я думаю, что работа над должным тезисом способствует переоценке этого.

0

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

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