示例#1
0
 /**
 * レコードオブジェクトを取得する
 *
 * 条件にマッチしたレコードオブジェクトのリストを取得する
 * 条件は次のように定義する<br>
 * $conditions = <br>
 *  [ <br>
 *     'where' => [ <br>
 *        'field' => 'age', <br>
 *        'comparision' => '>', <br>
 *        'value' => 20 <br>
 *     ],<br>
 *     'limit' => 5, <br>
 *     'offset' => 2, <br>
 *     'order' => 'id DESC'<br>
 * ]; <br>
 *
 * レコードクラスにアソシエーションが定義されていた場合<br>
 * AssociationCollectionによって関連レコードオブジェクトがアタッチされる<br>
 *
 * @param array $conditions 引数を省略した場合すべてのレコードオブジェクトのリストが取得される
 * @return array レコードオブジェクトのリスト
 */
 public static function find($conditions = [])
 {
     $strategy = self::inheritanceType();
     $result = $strategy->find(static::className(), $conditions);
     $resultSet = [];
     foreach ($result as $rowData) {
         $hydrate = static::className();
         if (isset($rowData['type'])) {
             list($namespace, $class) = Util::namespaceSplit($hydrate);
             $hydrate = $namespace . '\\' . $rowData['type'];
         }
         $record = IdentityMap::get($hydrate, $rowData[static::$primaryKey]);
         if ($record === false) {
             $record = self::hydrate($rowData, $hydrate);
             IdentityMap::set($hydrate, $record->id, $record);
         }
         AssociationCollection::attach($record, $hydrate::$associations);
         $resultSet[] = $record;
     }
     return $resultSet;
 }
示例#2
0
 public function save($record)
 {
     $className = get_class($record);
     list($namespace, $class) = Util::namespaceSplit($className);
     if (empty($record->type)) {
         $record->type = $class;
     }
     if (!class_exists($className)) {
         throw new \Exception('missing type ' . $className);
     }
     if ($record->isNew()) {
         $this->operator->insert($record);
         $success = $this->updateParent($record);
     } else {
         $success = $this->updateParent($record);
     }
     return $success;
 }