コード例 #1
0
ファイル: DelegateBehavior.php プロジェクト: sigma-z/dive
 /**
  * @param  Table  $table
  * @param  string $relationName
  * @return bool|\Dive\Relation\Relation
  */
 private function getOneToOneRelation(Table $table, $relationName)
 {
     if ($relationName && $table->hasRelation($relationName)) {
         $relation = $table->getRelation($relationName);
         if ($relation->isOneToOne()) {
             return $relation;
         }
     }
     return false;
 }
コード例 #2
0
ファイル: UnitOfWork.php プロジェクト: sigma-z/dive
 /**
  * Gets record (retrieved from repository if exists, or create new record!)
  *
  * @param  Table $table
  * @param  array $data
  * @param  bool  $exists
  * @throws \UnexpectedValueException
  * @return Record
  */
 public function getOrCreateRecord(Table $table, array $data, $exists = false)
 {
     $id = $table->getIdentifierAsString($data);
     if ($id !== false && $table->isInRepository($id)) {
         $record = $table->getFromRepository($id);
     } else {
         $record = $table->createRecord($data, $exists);
     }
     return $record;
 }
コード例 #3
0
ファイル: SelfReferenceTest.php プロジェクト: sigma-z/dive
 private function thenSaveShouldFail()
 {
     $e = null;
     try {
         $rm = $this->record->getRecordManager();
         $rm->scheduleSave($this->record);
         $rm->commit();
     } catch (Exception $e) {
         // see assert
     }
     $this->assertNotNull($e, 'record was saved: ' . print_r($this->table->createQuery()->fetchArray(), true));
 }
コード例 #4
0
ファイル: RecordCollection.php プロジェクト: sigma-z/dive
 /**
  * @param  mixed $record
  * @throws CollectionException
  */
 protected function throwExceptionIfRecordDoesNotMatchTable($record)
 {
     if (!$record instanceof Record) {
         throw new CollectionException('Argument #1 must be an instance of \\Dive\\Record!' . 'You gave me: ' . (is_object($record) ? get_class($record) : gettype($record)));
     }
     if ($record->getTable() != $this->table) {
         throw new CollectionException('Add record does not match table instance!' . ' Expected: ' . $this->table->getTableName() . ' You gave me: ' . $record->getTable()->getTableName());
     }
 }
コード例 #5
0
ファイル: RecordTest.php プロジェクト: sigma-z/dive
 public function testRecordReturnsToBeUnmodified()
 {
     $initialData = array('username' => 'David');
     $record = $this->table->createRecord($initialData);
     $record->set('username', 'Micheal');
     $this->assertTrue($record->isModified());
     $record->set('username', 'David');
     $this->assertFalse($record->isModified());
 }
コード例 #6
0
ファイル: Record.php プロジェクト: sigma-z/dive
 /**
  * @param array $references
  */
 public function loadReferences(array $references)
 {
     foreach ($references as $relationName => $relatedReferences) {
         /** @var RecordCollection|Record[]|Record $related */
         $related = $this->_table->getRelation($relationName)->getReferenceFor($this, $relationName);
         if (is_array($relatedReferences)) {
             if ($related instanceof RecordCollection) {
                 foreach ($related as $relatedRecord) {
                     $relatedRecord->loadReferences($relatedReferences);
                 }
             } else {
                 if ($related instanceof Record) {
                     $related->loadReferences($relatedReferences);
                 }
             }
         }
     }
 }
コード例 #7
0
ファイル: Hydrator.php プロジェクト: sigma-z/dive
 /**
  * hydrates record
  *
  * @param   Table $table
  * @param   array $row
  * @return  Record
  */
 protected function hydrateRecord(Table $table, array $row)
 {
     $record = $this->recordManager->getOrCreateRecord($table->getTableName(), $row, true);
     return $record;
 }
コード例 #8
0
 private function whenIFindOrCreateByPrimaryKey()
 {
     $this->resultRecord = $this->table->findOrCreateRecord($this->storedRecord->getIdentifierFieldIndexed());
 }
コード例 #9
0
ファイル: TestCase.php プロジェクト: sigma-z/dive
 /**
  * Inserts new data record to database
  *
  * @param  \Dive\Table      $table
  * @param  array            $data
  * @return string
  */
 protected static function insertDataset(Table $table, array $data)
 {
     $conn = $table->getConnection();
     $affectedRows = $conn->insert($table, $data);
     return $affectedRows == 1 ? $conn->getLastInsertId() : false;
 }
コード例 #10
0
ファイル: DatasetRegistry.php プロジェクト: sigma-z/dive
 /**
  * Clear dataset ids by given table
  *
  * @param \Dive\Table $table
  */
 public function clearByTable(Table $table)
 {
     $connIndex = $this->getConnectionIndex($table->getConnection());
     if ($connIndex === false) {
         return;
     }
     $tableName = $table->getTableName();
     unset($this->tables[$connIndex][$tableName]);
     unset($this->registry[$connIndex][$tableName]);
 }
コード例 #11
0
ファイル: RepositoryTest.php プロジェクト: sigma-z/dive
 public function testClear()
 {
     $this->table->createRecord(array('id' => 7, 'username' => 'Bart'), true);
     $this->repository->clear();
     $this->assertEquals(0, $this->repository->count());
 }
コード例 #12
0
ファイル: Connection.php プロジェクト: sigma-z/dive
 /**
  * @param  Table $table
  * @param  array $identifier
  * @throws InvalidArgumentException
  */
 private static function throwExceptionIfIdentifierDoesNotMatchTableIdentifier(Table $table, array $identifier)
 {
     $identifierFields = $table->getIdentifierFields();
     if (count($identifierFields) != count($identifier)) {
         throw new InvalidArgumentException("Identifier '" . implode(',', $identifier) . "'" . ' does not match table identifier (' . implode(', ', $identifierFields) . ')');
     }
 }
コード例 #13
0
ファイル: RecordGenerator.php プロジェクト: sigma-z/dive
 /**
  * @param Table $table
  * @param array $row
  * @return array
  */
 private function saveRequiredRelations(Table $table, array $row)
 {
     foreach ($table->getRelations() as $relationName => $relation) {
         $owning = $relation->getOwningField();
         if (!$relation->isReferencedSide($relationName) || isset($row[$relationName]) || isset($row[$owning])) {
             continue;
         }
         if ($table->isFieldRequired($owning)) {
             $row[$owning] = $this->saveRelatedRecord($relation->getReferencedTable(), null, array());
         }
     }
     return $row;
 }