Я надеюсь, что вы, ребята, можете помочь мне с этим:
Перво-наперво — я использую следующую версию / библиотеки:
Я пытаюсь преобразовать массивы 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
Где тег «описание» не определен.
На самом деле я надеялся, что он вернется к нулю там, где его нет.
Как правильно отловить, что некоторые наборы данных могут иметь или не иметь этот тег?
Надеюсь, вы можете помочь мне & Спасибо за прочтение 🙂
Я обнаружил, что я пытался получить доступ к одному слою «слишком глубоко» в моей функции.
Когда я пытался получить доступ
$this->setDescription($data->description);
я мог бы проверить, было ли это установлено:
if (isset($data->name)) $this->setName($data->name);
работает.
Я думал, что попробовал это уже безрезультатно — но я думаю, что работа над должным тезисом способствует переоценке этого.
Других решений пока нет …