public static function load($parent, $childs, $keyField, array $ids, $foreignKey = null) { self::parseItemStatement($parent, $parentItemName, $parentFields); Lms_Item::initStructure(Lms_Item::getClassName($parentItemName)); $struct = Lms_Item::getStruct($parentItemName); if (count($parentFields)) { if ($foreignKey && !in_array($foreignKey, $parentFields)) { array_unshift($parentFields, $foreignKey); } foreach ($struct->getPk() as $fieldName) { if (!in_array($fieldName, $parentFields)) { array_unshift($parentFields, $fieldName); } } } if (!$foreignKey && $struct->hasIndex($keyField)) { $foreignKey = $keyField; } $newScalarPKs = self::_exec($parentItemName, $parentFields, $keyField, $ids, $foreignKey); foreach ($childs as $child) { self::parseItemStatement($child, $childItemName, $childFields); Lms_Item::initStructure(Lms_Item::getClassName($childItemName)); $relation = Lms_Item_Relations::get($parentItemName, $childItemName); if (!$relation) { $linkatorItemName = Lms_Item::getLinkator($parentItemName, $childItemName); $subRelation = Lms_Item_Relations::get($parentItemName, $linkatorItemName); $newKeys = array_unique(Lms_Item_Store::getAllFieldValues($newScalarPKs, Lms_Item::getTableName($parentItemName), $subRelation['parent_key'])); self::load($linkatorItemName, array($child), $subRelation['foreign_key'], $newKeys, $subRelation['foreign_key']); } else { if (count($childFields)) { if ($relation && !in_array($relation['foreign_key'], $childFields)) { array_unshift($childFields, $relation['foreign_key']); } $struct = Lms_Item::getStruct($childItemName); foreach ($struct->getPk() as $fieldName) { if (!in_array($fieldName, $childFields)) { array_unshift($childFields, $fieldName); } } } $newKeys = array_unique(Lms_Item_Store::getAllFieldValues($newScalarPKs, Lms_Item::getTableName($parentItemName), $relation['parent_key'])); self::_exec($childItemName, $childFields, $relation['foreign_key'], $newKeys, $relation['foreign_key']); } } }
public static function rowToItem($row, $itemName = null) { if (!$row) { return null; } if (!$itemName) { $itemName = Lms_Item::getCallingItemName(); } Lms_Item::initStructure(Lms_Item::getClassName($itemName)); $simplePk = Lms_Item::getSimplePk($itemName); $tableName = Lms_Item::getTableName($itemName); Lms_Item_Store::setValues($tableName, $row[$simplePk], $row, true); return Lms_Item::create($itemName, $row[$simplePk]); }