RedBeanPHP\Repository::storeBeanWithLists PHP Method

storeBeanWithLists() protected method

Stores a bean and its lists in one run.
protected storeBeanWithLists ( redbeanphp\OODBBean $bean ) : void
$bean redbeanphp\OODBBean bean to process
return void
    protected function storeBeanWithLists(OODBBean $bean)
    {
        $sharedAdditions = $sharedTrashcan = $sharedresidue = $sharedItems = $ownAdditions = $ownTrashcan = $ownresidue = $embeddedBeans = array();
        //Define groups
        foreach ($bean as $property => $value) {
            $value = $value instanceof SimpleModel ? $value->unbox() : $value;
            if ($value instanceof OODBBean) {
                $this->processEmbeddedBean($embeddedBeans, $bean, $property, $value);
                $bean->setMeta("sys.typeof.{$property}", $value->getMeta('type'));
            } elseif (is_array($value)) {
                foreach ($value as &$item) {
                    $item = $item instanceof SimpleModel ? $item->unbox() : $item;
                }
                $originals = $bean->moveMeta('sys.shadow.' . $property, array());
                if (strpos($property, 'own') === 0) {
                    list($ownAdditions, $ownTrashcan, $ownresidue) = $this->processGroups($originals, $value, $ownAdditions, $ownTrashcan, $ownresidue);
                    $listName = lcfirst(substr($property, 3));
                    if ($bean->moveMeta('sys.exclusive-' . $listName)) {
                        OODBBean::setMetaAll($ownTrashcan, 'sys.garbage', TRUE);
                        OODBBean::setMetaAll($ownAdditions, 'sys.buildcommand.fkdependson', $bean->getMeta('type'));
                    }
                    unset($bean->{$property});
                } elseif (strpos($property, 'shared') === 0) {
                    list($sharedAdditions, $sharedTrashcan, $sharedresidue) = $this->processGroups($originals, $value, $sharedAdditions, $sharedTrashcan, $sharedresidue);
                    unset($bean->{$property});
                }
            }
        }
        $this->storeBean($bean);
        $this->processTrashcan($bean, $ownTrashcan);
        $this->processAdditions($bean, $ownAdditions);
        $this->processResidue($ownresidue);
        $this->processSharedTrashcan($bean, $sharedTrashcan);
        $this->processSharedAdditions($bean, $sharedAdditions);
        $this->processSharedResidue($bean, $sharedresidue);
    }