Prado\Data\SqlMap\DataMapper\TLazyLoadList::newInstance PHP Метод

newInstance() публичный статический Метод

Create a new instance of a lazy collection.
public static newInstance ( $mappedStatement, $param, $target, $propertyName ) : TObjectProxy
Результат TObjectProxy proxied collection object.
    public static function newInstance($mappedStatement, $param, $target, $propertyName)
    {
        $handler = new self($mappedStatement, $param, $target, $propertyName);
        $statement = $mappedStatement->getStatement();
        $registry = $mappedStatement->getManager()->getTypeHandlers();
        $list = $statement->createInstanceOfListClass($registry);
        if (!is_object($list)) {
            throw new TSqlMapExecutionException('sqlmap_invalid_lazyload_list', $statement->getID());
        }
        return new TObjectProxy($handler, $list);
    }

Usage Example

Пример #1
0
 /**
  * Add nested result property to post select queue.
  * @param string post select statement ID
  * @param TResultMap current result mapping details.
  * @param TResultProperty current result property.
  * @param array a result set row retrieved from the database
  * @param object the result object
  */
 protected function enquequePostSelect($select, $resultMap, $property, $row, $resultObject)
 {
     $statement = $this->getManager()->getMappedStatement($select);
     $key = $this->getPostSelectKeys($resultMap, $property, $row);
     $postSelect = new TPostSelectBinding();
     $postSelect->setStatement($statement);
     $postSelect->setResultObject($resultObject);
     $postSelect->setResultProperty($property);
     $postSelect->setKeys($key);
     if ($property->instanceOfListType($resultObject)) {
         $values = null;
         if ($property->getLazyLoad()) {
             $values = TLazyLoadList::newInstance($statement, $key, $resultObject, $property->getProperty());
             TPropertyAccess::set($resultObject, $property->getProperty(), $values);
         } else {
             $postSelect->setMethod(self::QUERY_FOR_LIST);
         }
     } else {
         if ($property->instanceOfArrayType($resultObject)) {
             $postSelect->setMethod(self::QUERY_FOR_ARRAY);
         } else {
             $postSelect->setMethod(self::QUERY_FOR_OBJECT);
         }
     }
     if (!$property->getLazyLoad()) {
         $this->_selectQueue[] = $postSelect;
     }
 }