assigns an identifier to the instance, for database storage
public assignIdentifier ( mixed $id = false ) : void | ||
$id | mixed | a key value or an array of keys |
return | void |
protected function _assignIdentifier(Doctrine_Record $record) { $table = $record->getTable(); $identifier = $table->getIdentifier(); $seq = $table->sequenceName; if (empty($seq) && !is_array($identifier) && $table->getIdentifierType() != Doctrine_Core::IDENTIFIER_NATURAL) { $id = false; if ($record->{$identifier} == null) { if (($driver = strtolower($this->conn->getDriverName())) == 'pgsql') { $seq = $table->getTableName() . '_' . $table->getColumnName($identifier); } elseif ($driver == 'oracle' || $driver == 'mssql') { $seq = $table->getTableName(); } $id = $this->conn->sequence->lastInsertId($seq); } else { $id = $record->{$identifier}; } if (!$id) { throw new Doctrine_Connection_Exception("Couldn't get last insert identifier."); } $record->assignIdentifier($id); } else { $record->assignIdentifier(true); } }
/** * @todo DESCRIBE WHAT THIS METHOD DOES, PLEASE! */ public function processSingleInsert(Doctrine_Record $record) { $fields = $record->getPrepared(); $table = $record->getTable(); // Populate fields with a blank array so that a blank records can be inserted if (empty($fields)) { foreach ($table->getFieldNames() as $field) { $fields[$field] = null; } } $identifier = (array) $table->getIdentifier(); $seq = $record->getTable()->sequenceName; if (!empty($seq)) { $id = $this->conn->sequence->nextId($seq); $seqName = $table->getIdentifier(); $fields[$seqName] = $id; $record->assignIdentifier($id); } $this->conn->insert($table, $fields); if (empty($seq) && count($identifier) == 1 && $identifier[0] == $table->getIdentifier() && $table->getIdentifierType() != Doctrine::IDENTIFIER_NATURAL) { if (($driver = strtolower($this->conn->getDriverName())) == 'pgsql') { $seq = $table->getTableName() . '_' . $identifier[0]; } elseif ($driver == 'oracle') { $seq = $table->getTableName(); } $id = $this->conn->sequence->lastInsertId($seq); if (!$id) { throw new Doctrine_Connection_Exception("Couldn't get last insert identifier."); } $record->assignIdentifier($id); } else { $record->assignIdentifier(true); } }
/** * inserts a record into database * * @param Doctrine_Record $record record to be inserted * @return boolean */ public function insert(Doctrine_Record $record) { // listen the onPreInsert event $event = new Doctrine_Event($this, Doctrine_Event::RECORD_INSERT); $record->preInsert($event); if (!$event->skipOperation) { $array = $record->getPrepared(); if (empty($array)) { return false; } $table = $record->getTable(); $keys = $table->getPrimaryKeys(); $seq = $record->getTable()->sequenceName; if (!empty($seq)) { $id = $this->conn->sequence->nextId($seq); $name = $record->getTable()->getIdentifier(); $array[$name] = $id; $record->assignIdentifier($id); } $this->conn->insert($table->getTableName(), $array); if (empty($seq) && count($keys) == 1 && $keys[0] == $table->getIdentifier() && $table->getIdentifierType() != Doctrine::IDENTIFIER_NATURAL) { if (strtolower($this->conn->getName()) == 'pgsql') { $seq = $table->getTableName() . '_' . $keys[0]; } $id = $this->conn->sequence->lastInsertId($seq); if (!$id) { $id = $table->getMaxIdentifier(); } $record->assignIdentifier($id); } else { $record->assignIdentifier(true); } } $record->getTable()->addRecord($record); $record->postInsert($event); return true; }
protected function _assignIdentifier(Doctrine_Record $record) { $table = $record->getTable(); $identifier = (array) $table->getIdentifier(); $seq = $table->sequenceName; if (empty($seq) && count($identifier) == 1 && $identifier[0] == $table->getIdentifier() && $table->getIdentifierType() != Doctrine_Core::IDENTIFIER_NATURAL) { if (($driver = strtolower($this->conn->getDriverName())) == 'pgsql') { $seq = $table->getTableName() . '_' . $identifier[0]; } elseif ($driver == 'oracle') { $seq = $table->getTableName(); } $id = $this->conn->sequence->lastInsertId($seq); if (!$id) { throw new Doctrine_Connection_Exception("Couldn't get last insert identifier."); } $record->assignIdentifier($id); } else { $record->assignIdentifier(true); } }
/** * @todo DESCRIBE WHAT THIS METHOD DOES, PLEASE! */ public function processSingleInsert(Doctrine_Record $record) { $fields = $record->getPrepared(); if (empty($fields)) { return false; } $table = $record->getTable(); $identifier = (array) $table->getIdentifier(); $seq = $record->getTable()->sequenceName; if (!empty($seq)) { $id = $this->conn->sequence->nextId($seq); $seqName = $table->getIdentifier(); $fields[$seqName] = $id; $record->assignIdentifier($id); } $this->conn->insert($table, $fields); if (empty($seq) && count($identifier) == 1 && $identifier[0] == $table->getIdentifier() && $table->getIdentifierType() != Doctrine::IDENTIFIER_NATURAL) { if (strtolower($this->conn->getName()) == 'pgsql') { $seq = $table->getTableName() . '_' . $identifier[0]; } $id = $this->conn->sequence->lastInsertId($seq); if (!$id) { throw new Doctrine_Connection_Exception("Couldn't get last insert identifier."); } $record->assignIdentifier($id); } else { $record->assignIdentifier(true); } }