Shanty-Mongo icon indicating copy to clipboard operation
Shanty-Mongo copied to clipboard

Checking for embedded document existing

Open CrazyClicker opened this issue 12 years ago • 3 comments

Hi! I'm new to Shanty_Mongo and Mongo itself so I got stuck.

I have a simple construction in my documents requirements

'products' => 'DocumentSet', 'products.$' => array('Document:Product'),

so when I add document to the set

$product = new Product($data = [....]); $this->products[15] = $product;

and then when I try to check product for existing

$this->products[11]; //returns empty Product class $this->products[20]; //returns null

How should I act to get model only on $this->products[15]?

CrazyClicker avatar Nov 08 '12 12:11 CrazyClicker

Hi,

I'm not exactly sure i know what you're asking but if you only want document 15 then you would do: $doc->products[15];

If you get an object back of class Product then the product exists. If you get back null then the document does not exist.

Cheers, Coen

coen-hyde avatar Nov 14 '12 20:11 coen-hyde

I will try to explain.

When i set

$product = new Product($data = [....]); $this->products[5] = $product; $this->save();

my var_dump($this->products) looks like array(null,null,null,null,null, Object Product);

so when I try to call $this->products[2]; method Shanty_Mongo_DocumentSet::getProperty() returns empty object of Product class but not null. It is happenning because of line 54 of this class

if (array_key_exists($index, $this->_cleanData) ) $data = $this->_cleanData[$index];

there is no check for null value and method creates and returns new instance of a class. So i added is_null check

if (array_key_exists($index, $this->_cleanData) && !is_null($this->_cleanData[$index])) $data = $this->_cleanData[$index];

and it works as expected now (for me at least)

CrazyClicker avatar Nov 14 '12 20:11 CrazyClicker

I can get correct result also if I use isset() function to check if property is really exists. It works pretty well for checking if properties with such requirements as 'DocumentSet' or 'Document' are really exist and not created 'on the fly' by getProperty methods.

It should be noticed in readmy prob.

CrazyClicker avatar Nov 22 '12 08:11 CrazyClicker