Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** Base class that represents a row from the 'article' table.**** This class was autogenerated by Propel 1.4.2 on:** Fri Aug 5 09:39:36 2011** @package lib.model.om*/abstract class BaseArticle extends BaseObject implements Persistent {/*** The Peer class.* Instance provides a convenient way of calling static methods on a class* that calling code may not be able to identify.* @var ArticlePeer*/protected static $peer;/*** The value for the id field.* @var int*/protected $id;/*** The value for the title field.* @var string*/protected $title;/*** The value for the body field.* @var string*/protected $body;/*** The value for the online field.* @var boolean*/protected $online;/*** The value for the excerpt field.* @var string*/protected $excerpt;/*** The value for the category_id field.* @var int*/protected $category_id;/*** The value for the created_at field.* @var string*/protected $created_at;/*** The value for the end_date field.* @var string*/protected $end_date;/*** The value for the book_id field.* @var int*/protected $book_id;/*** @var Category*/protected $aCategory;/*** @var Book*/protected $aBook;/*** @var array AuthorArticle[] Collection to store aggregation of AuthorArticle objects.*/protected $collAuthorArticles;/*** @var Criteria The criteria used to select the current contents of collAuthorArticles.*/private $lastAuthorArticleCriteria = null;/*** @var array Attachment[] Collection to store aggregation of Attachment objects.*/protected $collAttachments;/*** @var Criteria The criteria used to select the current contents of collAttachments.*/private $lastAttachmentCriteria = null;/*** Flag to prevent endless save loop, if this object is referenced* by another object which falls in this transaction.* @var boolean*/protected $alreadyInSave = false;/*** Flag to prevent endless validation loop, if this object is referenced* by another object which falls in this transaction.* @var boolean*/protected $alreadyInValidation = false;// symfony behaviorconst PEER = 'ArticlePeer';/*** Get the [id] column value.** @return int*/public function getId(){return $this->id;}/*** Get the [title] column value.** @return string*/public function getTitle(){return $this->title;}/*** Get the [body] column value.** @return string*/public function getBody(){return $this->body;}/*** Get the [online] column value.** @return boolean*/public function getOnline(){return $this->online;}/*** Get the [excerpt] column value.** @return string*/public function getExcerpt(){return $this->excerpt;}/*** Get the [category_id] column value.** @return int*/public function getCategoryId(){return $this->category_id;}/*** Get the [optionally formatted] temporal [created_at] column value.*** @param string $format The date/time format string (either date()-style or strftime()-style).* If format is NULL, then the raw DateTime object will be returned.* @return mixed Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL* @throws PropelException - if unable to parse/validate the date/time value.*/public function getCreatedAt($format = 'Y-m-d H:i:s'){if ($this->created_at === null) {return null;}try {$dt = new DateTime($this->created_at);} catch (Exception $x) {throw new PropelException("Internally stored date/time/timestamp value could not be converted to DateTime: " . var_export($this->created_at, true), $x);}if ($format === null) {// Because propel.useDateTimeClass is TRUE, we return a DateTime object.return $dt;} elseif (strpos($format, '%') !== false) {return strftime($format, $dt->format('U'));} else {return $dt->format($format);}}/*** Get the [optionally formatted] temporal [end_date] column value.*** @param string $format The date/time format string (either date()-style or strftime()-style).* If format is NULL, then the raw DateTime object will be returned.* @return mixed Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL* @throws PropelException - if unable to parse/validate the date/time value.*/public function getEndDate($format = 'Y-m-d H:i:s'){if ($this->end_date === null) {return null;}try {$dt = new DateTime($this->end_date);} catch (Exception $x) {throw new PropelException("Internally stored date/time/timestamp value could not be converted to DateTime: " . var_export($this->end_date, true), $x);}if ($format === null) {// Because propel.useDateTimeClass is TRUE, we return a DateTime object.return $dt;} elseif (strpos($format, '%') !== false) {return strftime($format, $dt->format('U'));} else {return $dt->format($format);}}/*** Get the [book_id] column value.** @return int*/public function getBookId(){return $this->book_id;}/*** Set the value of [id] column.** @param int $v new value* @return Article The current object (for fluent API support)*/public function setId($v){if ($v !== null) {$v = (int) $v;}if ($this->id !== $v) {$this->id = $v;$this->modifiedColumns[] = ArticlePeer::ID;}return $this;} // setId()/*** Set the value of [title] column.** @param string $v new value* @return Article The current object (for fluent API support)*/public function setTitle($v){if ($v !== null) {$v = (string) $v;}if ($this->title !== $v) {$this->title = $v;$this->modifiedColumns[] = ArticlePeer::TITLE;}return $this;} // setTitle()/*** Set the value of [body] column.** @param string $v new value* @return Article The current object (for fluent API support)*/public function setBody($v){if ($v !== null) {$v = (string) $v;}if ($this->body !== $v) {$this->body = $v;$this->modifiedColumns[] = ArticlePeer::BODY;}return $this;} // setBody()/*** Set the value of [online] column.** @param boolean $v new value* @return Article The current object (for fluent API support)*/public function setOnline($v){if ($v !== null) {$v = (boolean) $v;}if ($this->online !== $v) {$this->online = $v;$this->modifiedColumns[] = ArticlePeer::ONLINE;}return $this;} // setOnline()/*** Set the value of [excerpt] column.** @param string $v new value* @return Article The current object (for fluent API support)*/public function setExcerpt($v){if ($v !== null) {$v = (string) $v;}if ($this->excerpt !== $v) {$this->excerpt = $v;$this->modifiedColumns[] = ArticlePeer::EXCERPT;}return $this;} // setExcerpt()/*** Set the value of [category_id] column.** @param int $v new value* @return Article The current object (for fluent API support)*/public function setCategoryId($v){if ($v !== null) {$v = (int) $v;}if ($this->category_id !== $v) {$this->category_id = $v;$this->modifiedColumns[] = ArticlePeer::CATEGORY_ID;}if ($this->aCategory !== null && $this->aCategory->getId() !== $v) {$this->aCategory = null;}return $this;} // setCategoryId()/*** Sets the value of [created_at] column to a normalized version of the date/time value specified.** @param mixed $v string, integer (timestamp), or DateTime value. Empty string will* be treated as NULL for temporal objects.* @return Article The current object (for fluent API support)*/public function setCreatedAt($v){// we treat '' as NULL for temporal objects because DateTime('') == DateTime('now')// -- which is unexpected, to say the least.if ($v === null || $v === '') {$dt = null;} elseif ($v instanceof DateTime) {$dt = $v;} else {// some string/numeric value passed; we normalize that so that we can// validate it.try {if (is_numeric($v)) { // if it's a unix timestamp$dt = new DateTime('@'.$v, new DateTimeZone('UTC'));// We have to explicitly specify and then change the time zone because of a// DateTime bug: http://bugs.php.net/bug.php?id=43003$dt->setTimeZone(new DateTimeZone(date_default_timezone_get()));} else {$dt = new DateTime($v);}} catch (Exception $x) {throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x);}}if ( $this->created_at !== null || $dt !== null ) {// (nested ifs are a little easier to read in this case)$currNorm = ($this->created_at !== null && $tmpDt = new DateTime($this->created_at)) ? $tmpDt->format('Y-m-d\\TH:i:sO') : null;$newNorm = ($dt !== null) ? $dt->format('Y-m-d\\TH:i:sO') : null;if ( ($currNorm !== $newNorm) // normalized values don't match){$this->created_at = ($dt ? $dt->format('Y-m-d\\TH:i:sO') : null);$this->modifiedColumns[] = ArticlePeer::CREATED_AT;}} // if either are not nullreturn $this;} // setCreatedAt()/*** Sets the value of [end_date] column to a normalized version of the date/time value specified.** @param mixed $v string, integer (timestamp), or DateTime value. Empty string will* be treated as NULL for temporal objects.* @return Article The current object (for fluent API support)*/public function setEndDate($v){// we treat '' as NULL for temporal objects because DateTime('') == DateTime('now')// -- which is unexpected, to say the least.if ($v === null || $v === '') {$dt = null;} elseif ($v instanceof DateTime) {$dt = $v;} else {// some string/numeric value passed; we normalize that so that we can// validate it.try {if (is_numeric($v)) { // if it's a unix timestamp$dt = new DateTime('@'.$v, new DateTimeZone('UTC'));// We have to explicitly specify and then change the time zone because of a// DateTime bug: http://bugs.php.net/bug.php?id=43003$dt->setTimeZone(new DateTimeZone(date_default_timezone_get()));} else {$dt = new DateTime($v);}} catch (Exception $x) {throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x);}}if ( $this->end_date !== null || $dt !== null ) {// (nested ifs are a little easier to read in this case)$currNorm = ($this->end_date !== null && $tmpDt = new DateTime($this->end_date)) ? $tmpDt->format('Y-m-d\\TH:i:sO') : null;$newNorm = ($dt !== null) ? $dt->format('Y-m-d\\TH:i:sO') : null;if ( ($currNorm !== $newNorm) // normalized values don't match){$this->end_date = ($dt ? $dt->format('Y-m-d\\TH:i:sO') : null);$this->modifiedColumns[] = ArticlePeer::END_DATE;}} // if either are not nullreturn $this;} // setEndDate()/*** Set the value of [book_id] column.** @param int $v new value* @return Article The current object (for fluent API support)*/public function setBookId($v){if ($v !== null) {$v = (int) $v;}if ($this->book_id !== $v) {$this->book_id = $v;$this->modifiedColumns[] = ArticlePeer::BOOK_ID;}if ($this->aBook !== null && $this->aBook->getId() !== $v) {$this->aBook = null;}return $this;} // setBookId()/*** Indicates whether the columns in this object are only set to default values.** This method can be used in conjunction with isModified() to indicate whether an object is both* modified _and_ has some values set which are non-default.** @return boolean Whether the columns in this object are only been set with default values.*/public function hasOnlyDefaultValues(){// otherwise, everything was equal, so return TRUEreturn true;} // hasOnlyDefaultValues()/*** Hydrates (populates) the object variables with values from the database resultset.** An offset (0-based "start column") is specified so that objects can be hydrated* with a subset of the columns in the resultset rows. This is needed, for example,* for results of JOIN queries where the resultset row includes columns from two or* more tables.** @param array $row The row returned by PDOStatement->fetch(PDO::FETCH_NUM)* @param int $startcol 0-based offset column which indicates which restultset column to start with.* @param boolean $rehydrate Whether this object is being re-hydrated from the database.* @return int next starting column* @throws PropelException - Any caught Exception will be rewrapped as a PropelException.*/public function hydrate($row, $startcol = 0, $rehydrate = false){try {$this->id = ($row[$startcol + 0] !== null) ? (int) $row[$startcol + 0] : null;$this->title = ($row[$startcol + 1] !== null) ? (string) $row[$startcol + 1] : null;$this->body = ($row[$startcol + 2] !== null) ? (string) $row[$startcol + 2] : null;$this->online = ($row[$startcol + 3] !== null) ? (boolean) $row[$startcol + 3] : null;$this->excerpt = ($row[$startcol + 4] !== null) ? (string) $row[$startcol + 4] : null;$this->category_id = ($row[$startcol + 5] !== null) ? (int) $row[$startcol + 5] : null;$this->created_at = ($row[$startcol + 6] !== null) ? (string) $row[$startcol + 6] : null;$this->end_date = ($row[$startcol + 7] !== null) ? (string) $row[$startcol + 7] : null;$this->book_id = ($row[$startcol + 8] !== null) ? (int) $row[$startcol + 8] : null;$this->resetModified();$this->setNew(false);if ($rehydrate) {$this->ensureConsistency();}// FIXME - using NUM_COLUMNS may be clearer.return $startcol + 9; // 9 = ArticlePeer::NUM_COLUMNS - ArticlePeer::NUM_LAZY_LOAD_COLUMNS).} catch (Exception $e) {throw new PropelException("Error populating Article object", $e);}}/*** Checks and repairs the internal consistency of the object.** This method is executed after an already-instantiated object is re-hydrated* from the database. It exists to check any foreign keys to make sure that* the objects related to the current object are correct based on foreign key.** You can override this method in the stub class, but you should always invoke* the base method from the overridden method (i.e. parent::ensureConsistency()),* in case your model changes.** @throws PropelException*/public function ensureConsistency(){if ($this->aCategory !== null && $this->category_id !== $this->aCategory->getId()) {$this->aCategory = null;}if ($this->aBook !== null && $this->book_id !== $this->aBook->getId()) {$this->aBook = null;}} // ensureConsistency/*** Reloads this object from datastore based on primary key and (optionally) resets all associated objects.** This will only work if the object has been saved and has a valid primary key set.** @param boolean $deep (optional) Whether to also de-associated any related objects.* @param PropelPDO $con (optional) The PropelPDO connection to use.* @return void* @throws PropelException - if this object is deleted, unsaved or doesn't have pk match in db*/public function reload($deep = false, PropelPDO $con = null){if ($this->isDeleted()) {throw new PropelException("Cannot reload a deleted object.");}if ($this->isNew()) {throw new PropelException("Cannot reload an unsaved object.");}if ($con === null) {$con = Propel::getConnection(ArticlePeer::DATABASE_NAME, Propel::CONNECTION_READ);}// We don't need to alter the object instance pool; we're just modifying this instance// already in the pool.$stmt = ArticlePeer::doSelectStmt($this->buildPkeyCriteria(), $con);$row = $stmt->fetch(PDO::FETCH_NUM);$stmt->closeCursor();if (!$row) {throw new PropelException('Cannot find matching row in the database to reload object values.');}$this->hydrate($row, 0, true); // rehydrateif ($deep) { // also de-associate any related objects?$this->aCategory = null;$this->aBook = null;$this->collAuthorArticles = null;$this->lastAuthorArticleCriteria = null;$this->collAttachments = null;$this->lastAttachmentCriteria = null;} // if (deep)}/*** Removes this object from datastore and sets delete attribute.** @param PropelPDO $con* @return void* @throws PropelException* @see BaseObject::setDeleted()* @see BaseObject::isDeleted()*/public function delete(PropelPDO $con = null){if ($this->isDeleted()) {throw new PropelException("This object has already been deleted.");}if ($con === null) {$con = Propel::getConnection(ArticlePeer::DATABASE_NAME, Propel::CONNECTION_WRITE);}$con->beginTransaction();try {$ret = $this->preDelete($con);// symfony_behaviors behaviorforeach (sfMixer::getCallables('BaseArticle:delete:pre') as $callable){if (call_user_func($callable, $this, $con)){$con->commit();return;}}if ($ret) {ArticlePeer::doDelete($this, $con);$this->postDelete($con);// symfony_behaviors behaviorforeach (sfMixer::getCallables('BaseArticle:delete:post') as $callable){call_user_func($callable, $this, $con);}$this->setDeleted(true);$con->commit();} else {$con->commit();}} catch (PropelException $e) {$con->rollBack();throw $e;}}/*** Persists this object to the database.** If the object is new, it inserts it; otherwise an update is performed.* All modified related objects will also be persisted in the doSave()* method. This method wraps all precipitate database operations in a* single transaction.** @param PropelPDO $con* @return int The number of rows affected by this insert/update and any referring fk objects' save() operations.* @throws PropelException* @see doSave()*/public function save(PropelPDO $con = null){if ($this->isDeleted()) {throw new PropelException("You cannot save an object that has been deleted.");}if ($con === null) {$con = Propel::getConnection(ArticlePeer::DATABASE_NAME, Propel::CONNECTION_WRITE);}$con->beginTransaction();$isInsert = $this->isNew();try {$ret = $this->preSave($con);// symfony_behaviors behaviorforeach (sfMixer::getCallables('BaseArticle:save:pre') as $callable){if (is_integer($affectedRows = call_user_func($callable, $this, $con))){$con->commit();return $affectedRows;}}// symfony_timestampable behaviorif ($isInsert) {$ret = $ret && $this->preInsert($con);// symfony_timestampable behaviorif (!$this->isColumnModified(ArticlePeer::CREATED_AT)){$this->setCreatedAt(time());}} else {$ret = $ret && $this->preUpdate($con);}if ($ret) {$affectedRows = $this->doSave($con);if ($isInsert) {$this->postInsert($con);} else {$this->postUpdate($con);}$this->postSave($con);// symfony_behaviors behaviorforeach (sfMixer::getCallables('BaseArticle:save:post') as $callable){call_user_func($callable, $this, $con, $affectedRows);}ArticlePeer::addInstanceToPool($this);} else {$affectedRows = 0;}$con->commit();return $affectedRows;} catch (PropelException $e) {$con->rollBack();throw $e;}}/*** Performs the work of inserting or updating the row in the database.** If the object is new, it inserts it; otherwise an update is performed.* All related objects are also updated in this method.** @param PropelPDO $con* @return int The number of rows affected by this insert/update and any referring fk objects' save() operations.* @throws PropelException* @see save()*/protected function doSave(PropelPDO $con){$affectedRows = 0; // initialize var to track total num of affected rowsif (!$this->alreadyInSave) {$this->alreadyInSave = true;// We call the save method on the following object(s) if they// were passed to this object by their coresponding set// method. This object relates to these object(s) by a// foreign key reference.if ($this->aCategory !== null) {if ($this->aCategory->isModified() || $this->aCategory->isNew()) {$affectedRows += $this->aCategory->save($con);}$this->setCategory($this->aCategory);}if ($this->aBook !== null) {if ($this->aBook->isModified() || $this->aBook->isNew()) {$affectedRows += $this->aBook->save($con);}$this->setBook($this->aBook);}if ($this->isNew() ) {$this->modifiedColumns[] = ArticlePeer::ID;}// If this object has been modified, then save it to the database.if ($this->isModified()) {if ($this->isNew()) {$pk = ArticlePeer::doInsert($this, $con);$affectedRows += 1; // we are assuming that there is only 1 row per doInsert() which// should always be true here (even though technically// BasePeer::doInsert() can insert multiple rows).$this->setId($pk); //[IMV] update autoincrement primary key$this->setNew(false);} else {$affectedRows += ArticlePeer::doUpdate($this, $con);}$this->resetModified(); // [HL] After being saved an object is no longer 'modified'}if ($this->collAuthorArticles !== null) {foreach ($this->collAuthorArticles as $referrerFK) {if (!$referrerFK->isDeleted()) {$affectedRows += $referrerFK->save($con);}}}if ($this->collAttachments !== null) {foreach ($this->collAttachments as $referrerFK) {if (!$referrerFK->isDeleted()) {$affectedRows += $referrerFK->save($con);}}}$this->alreadyInSave = false;}return $affectedRows;} // doSave()/*** Array of ValidationFailed objects.* @var array ValidationFailed[]*/protected $validationFailures = array();/*** Gets any ValidationFailed objects that resulted from last call to validate().*** @return array ValidationFailed[]* @see validate()*/public function getValidationFailures(){return $this->validationFailures;}/*** Validates the objects modified field values and all objects related to this table.** If $columns is either a column name or an array of column names* only those columns are validated.** @param mixed $columns Column name or an array of column names.* @return boolean Whether all columns pass validation.* @see doValidate()* @see getValidationFailures()*/public function validate($columns = null){$res = $this->doValidate($columns);if ($res === true) {$this->validationFailures = array();return true;} else {$this->validationFailures = $res;return false;}}/*** This function performs the validation work for complex object models.** In addition to checking the current object, all related objects will* also be validated. If all pass then <code>true</code> is returned; otherwise* an aggreagated array of ValidationFailed objects will be returned.** @param array $columns Array of column names to validate.* @return mixed <code>true</code> if all validations pass; array of <code>ValidationFailed</code> objets otherwise.*/protected function doValidate($columns = null){if (!$this->alreadyInValidation) {$this->alreadyInValidation = true;$retval = null;$failureMap = array();// We call the validate method on the following object(s) if they// were passed to this object by their coresponding set// method. This object relates to these object(s) by a// foreign key reference.if ($this->aCategory !== null) {if (!$this->aCategory->validate($columns)) {$failureMap = array_merge($failureMap, $this->aCategory->getValidationFailures());}}if ($this->aBook !== null) {if (!$this->aBook->validate($columns)) {$failureMap = array_merge($failureMap, $this->aBook->getValidationFailures());}}if (($retval = ArticlePeer::doValidate($this, $columns)) !== true) {$failureMap = array_merge($failureMap, $retval);}if ($this->collAuthorArticles !== null) {foreach ($this->collAuthorArticles as $referrerFK) {if (!$referrerFK->validate($columns)) {$failureMap = array_merge($failureMap, $referrerFK->getValidationFailures());}}}if ($this->collAttachments !== null) {foreach ($this->collAttachments as $referrerFK) {if (!$referrerFK->validate($columns)) {$failureMap = array_merge($failureMap, $referrerFK->getValidationFailures());}}}$this->alreadyInValidation = false;}return (!empty($failureMap) ? $failureMap : true);}/*** Retrieves a field from the object by name passed in as a string.** @param string $name name* @param string $type The type of fieldname the $name is of:* one of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME* BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM* @return mixed Value of field.*/public function getByName($name, $type = BasePeer::TYPE_PHPNAME){$pos = ArticlePeer::translateFieldName($name, $type, BasePeer::TYPE_NUM);$field = $this->getByPosition($pos);return $field;}/*** Retrieves a field from the object by Position as specified in the xml schema.* Zero-based.** @param int $pos position in xml schema* @return mixed Value of field at $pos*/public function getByPosition($pos){switch($pos) {case 0:return $this->getId();break;case 1:return $this->getTitle();break;case 2:return $this->getBody();break;case 3:return $this->getOnline();break;case 4:return $this->getExcerpt();break;case 5:return $this->getCategoryId();break;case 6:return $this->getCreatedAt();break;case 7:return $this->getEndDate();break;case 8:return $this->getBookId();break;default:return null;break;} // switch()}/*** Exports the object as an array.** You can specify the key type of the array by passing one of the class* type constants.** @param string $keyType (optional) One of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME* BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM. Defaults to BasePeer::TYPE_PHPNAME.* @param boolean $includeLazyLoadColumns (optional) Whether to include lazy loaded columns. Defaults to TRUE.* @return an associative array containing the field names (as keys) and field values*/public function toArray($keyType = BasePeer::TYPE_PHPNAME, $includeLazyLoadColumns = true){$keys = ArticlePeer::getFieldNames($keyType);$result = array($keys[0] => $this->getId(),$keys[1] => $this->getTitle(),$keys[2] => $this->getBody(),$keys[3] => $this->getOnline(),$keys[4] => $this->getExcerpt(),$keys[5] => $this->getCategoryId(),$keys[6] => $this->getCreatedAt(),$keys[7] => $this->getEndDate(),$keys[8] => $this->getBookId(),);return $result;}/*** Sets a field from the object by name passed in as a string.** @param string $name peer name* @param mixed $value field value* @param string $type The type of fieldname the $name is of:* one of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME* BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM* @return void*/public function setByName($name, $value, $type = BasePeer::TYPE_PHPNAME){$pos = ArticlePeer::translateFieldName($name, $type, BasePeer::TYPE_NUM);return $this->setByPosition($pos, $value);}/*** Sets a field from the object by Position as specified in the xml schema.* Zero-based.** @param int $pos position in xml schema* @param mixed $value field value* @return void*/public function setByPosition($pos, $value){switch($pos) {case 0:$this->setId($value);break;case 1:$this->setTitle($value);break;case 2:$this->setBody($value);break;case 3:$this->setOnline($value);break;case 4:$this->setExcerpt($value);break;case 5:$this->setCategoryId($value);break;case 6:$this->setCreatedAt($value);break;case 7:$this->setEndDate($value);break;case 8:$this->setBookId($value);break;} // switch()}/*** Populates the object using an array.** This is particularly useful when populating an object from one of the* request arrays (e.g. $_POST). This method goes through the column* names, checking to see whether a matching key exists in populated* array. If so the setByName() method is called for that column.** You can specify the key type of the array by additionally passing one* of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME,* BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.* The default key type is the column's phpname (e.g. 'AuthorId')** @param array $arr An array to populate the object from.* @param string $keyType The type of keys the array uses.* @return void*/public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME){$keys = ArticlePeer::getFieldNames($keyType);if (array_key_exists($keys[0], $arr)) $this->setId($arr[$keys[0]]);if (array_key_exists($keys[1], $arr)) $this->setTitle($arr[$keys[1]]);if (array_key_exists($keys[2], $arr)) $this->setBody($arr[$keys[2]]);if (array_key_exists($keys[3], $arr)) $this->setOnline($arr[$keys[3]]);if (array_key_exists($keys[4], $arr)) $this->setExcerpt($arr[$keys[4]]);if (array_key_exists($keys[5], $arr)) $this->setCategoryId($arr[$keys[5]]);if (array_key_exists($keys[6], $arr)) $this->setCreatedAt($arr[$keys[6]]);if (array_key_exists($keys[7], $arr)) $this->setEndDate($arr[$keys[7]]);if (array_key_exists($keys[8], $arr)) $this->setBookId($arr[$keys[8]]);}/*** Build a Criteria object containing the values of all modified columns in this object.** @return Criteria The Criteria object containing all modified values.*/public function buildCriteria(){$criteria = new Criteria(ArticlePeer::DATABASE_NAME);if ($this->isColumnModified(ArticlePeer::ID)) $criteria->add(ArticlePeer::ID, $this->id);if ($this->isColumnModified(ArticlePeer::TITLE)) $criteria->add(ArticlePeer::TITLE, $this->title);if ($this->isColumnModified(ArticlePeer::BODY)) $criteria->add(ArticlePeer::BODY, $this->body);if ($this->isColumnModified(ArticlePeer::ONLINE)) $criteria->add(ArticlePeer::ONLINE, $this->online);if ($this->isColumnModified(ArticlePeer::EXCERPT)) $criteria->add(ArticlePeer::EXCERPT, $this->excerpt);if ($this->isColumnModified(ArticlePeer::CATEGORY_ID)) $criteria->add(ArticlePeer::CATEGORY_ID, $this->category_id);if ($this->isColumnModified(ArticlePeer::CREATED_AT)) $criteria->add(ArticlePeer::CREATED_AT, $this->created_at);if ($this->isColumnModified(ArticlePeer::END_DATE)) $criteria->add(ArticlePeer::END_DATE, $this->end_date);if ($this->isColumnModified(ArticlePeer::BOOK_ID)) $criteria->add(ArticlePeer::BOOK_ID, $this->book_id);return $criteria;}/*** Builds a Criteria object containing the primary key for this object.** Unlike buildCriteria() this method includes the primary key values regardless* of whether or not they have been modified.** @return Criteria The Criteria object containing value(s) for primary key(s).*/public function buildPkeyCriteria(){$criteria = new Criteria(ArticlePeer::DATABASE_NAME);$criteria->add(ArticlePeer::ID, $this->id);return $criteria;}/*** Returns the primary key for this object (row).* @return int*/public function getPrimaryKey(){return $this->getId();}/*** Generic method to set the primary key (id column).** @param int $key Primary key.* @return void*/public function setPrimaryKey($key){$this->setId($key);}/*** Sets contents of passed object to values from current object.** If desired, this method can also make copies of all associated (fkey referrers)* objects.** @param object $copyObj An object of Article (or compatible) type.* @param boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row.* @throws PropelException*/public function copyInto($copyObj, $deepCopy = false){$copyObj->setTitle($this->title);$copyObj->setBody($this->body);$copyObj->setOnline($this->online);$copyObj->setExcerpt($this->excerpt);$copyObj->setCategoryId($this->category_id);$copyObj->setCreatedAt($this->created_at);$copyObj->setEndDate($this->end_date);$copyObj->setBookId($this->book_id);if ($deepCopy) {// important: temporarily setNew(false) because this affects the behavior of// the getter/setter methods for fkey referrer objects.$copyObj->setNew(false);foreach ($this->getAuthorArticles() as $relObj) {if ($relObj !== $this) { // ensure that we don't try to copy a reference to ourselves$copyObj->addAuthorArticle($relObj->copy($deepCopy));}}foreach ($this->getAttachments() as $relObj) {if ($relObj !== $this) { // ensure that we don't try to copy a reference to ourselves$copyObj->addAttachment($relObj->copy($deepCopy));}}} // if ($deepCopy)$copyObj->setNew(true);$copyObj->setId(NULL); // this is a auto-increment column, so set to default value}/*** Makes a copy of this object that will be inserted as a new row in table when saved.* It creates a new object filling in the simple attributes, but skipping any primary* keys that are defined for the table.** If desired, this method can also make copies of all associated (fkey referrers)* objects.** @param boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row.* @return Article Clone of current object.* @throws PropelException*/public function copy($deepCopy = false){// we use get_class(), because this might be a subclass$clazz = get_class($this);$copyObj = new $clazz();$this->copyInto($copyObj, $deepCopy);return $copyObj;}/*** Returns a peer instance associated with this om.** Since Peer classes are not to have any instance attributes, this method returns the* same instance for all member of this class. The method could therefore* be static, but this would prevent one from overriding the behavior.** @return ArticlePeer*/public function getPeer(){if (self::$peer === null) {self::$peer = new ArticlePeer();}return self::$peer;}/*** Declares an association between this object and a Category object.** @param Category $v* @return Article The current object (for fluent API support)* @throws PropelException*/public function setCategory(Category $v = null){if ($v === null) {$this->setCategoryId(NULL);} else {$this->setCategoryId($v->getId());}$this->aCategory = $v;// Add binding for other direction of this n:n relationship.// If this object has already been added to the Category object, it will not be re-added.if ($v !== null) {$v->addArticle($this);}return $this;}/*** Get the associated Category object** @param PropelPDO Optional Connection object.* @return Category The associated Category object.* @throws PropelException*/public function getCategory(PropelPDO $con = null){if ($this->aCategory === null && ($this->category_id !== null)) {$this->aCategory = CategoryPeer::retrieveByPk($this->category_id);/* The following can be used additionally toguarantee the related object contains a referenceto this object. This level of coupling may, however, beundesirable since it could result in an only partially populated collectionin the referenced object.$this->aCategory->addArticles($this);*/}return $this->aCategory;}/*** Declares an association between this object and a Book object.** @param Book $v* @return Article The current object (for fluent API support)* @throws PropelException*/public function setBook(Book $v = null){if ($v === null) {$this->setBookId(NULL);} else {$this->setBookId($v->getId());}$this->aBook = $v;// Add binding for other direction of this n:n relationship.// If this object has already been added to the Book object, it will not be re-added.if ($v !== null) {$v->addArticle($this);}return $this;}/*** Get the associated Book object** @param PropelPDO Optional Connection object.* @return Book The associated Book object.* @throws PropelException*/public function getBook(PropelPDO $con = null){if ($this->aBook === null && ($this->book_id !== null)) {$this->aBook = BookPeer::retrieveByPk($this->book_id);/* The following can be used additionally toguarantee the related object contains a referenceto this object. This level of coupling may, however, beundesirable since it could result in an only partially populated collectionin the referenced object.$this->aBook->addArticles($this);*/}return $this->aBook;}/*** Clears out the collAuthorArticles collection (array).** This does not modify the database; however, it will remove any associated objects, causing* them to be refetched by subsequent calls to accessor method.** @return void* @see addAuthorArticles()*/public function clearAuthorArticles(){$this->collAuthorArticles = null; // important to set this to NULL since that means it is uninitialized}/*** Initializes the collAuthorArticles collection (array).** By default this just sets the collAuthorArticles collection to an empty array (like clearcollAuthorArticles());* however, you may wish to override this method in your stub class to provide setting appropriate* to your application -- for example, setting the initial array to the values stored in database.** @return void*/public function initAuthorArticles(){$this->collAuthorArticles = array();}/*** Gets an array of AuthorArticle objects which contain a foreign key that references this object.** If this collection has already been initialized with an identical Criteria, it returns the collection.* Otherwise if this Article has previously been saved, it will retrieve* related AuthorArticles from storage. If this Article is new, it will return* an empty collection or the current collection, the criteria is ignored on a new object.** @param PropelPDO $con* @param Criteria $criteria* @return array AuthorArticle[]* @throws PropelException*/public function getAuthorArticles($criteria = null, PropelPDO $con = null){if ($criteria === null) {$criteria = new Criteria(ArticlePeer::DATABASE_NAME);}elseif ($criteria instanceof Criteria){$criteria = clone $criteria;}if ($this->collAuthorArticles === null) {if ($this->isNew()) {$this->collAuthorArticles = array();} else {$criteria->add(AuthorArticlePeer::ARTICLE_ID, $this->id);AuthorArticlePeer::addSelectColumns($criteria);$this->collAuthorArticles = AuthorArticlePeer::doSelect($criteria, $con);}} else {// criteria has no effect for a new objectif (!$this->isNew()) {// the following code is to determine if a new query is// called for. If the criteria is the same as the last// one, just return the collection.$criteria->add(AuthorArticlePeer::ARTICLE_ID, $this->id);AuthorArticlePeer::addSelectColumns($criteria);if (!isset($this->lastAuthorArticleCriteria) || !$this->lastAuthorArticleCriteria->equals($criteria)) {$this->collAuthorArticles = AuthorArticlePeer::doSelect($criteria, $con);}}}$this->lastAuthorArticleCriteria = $criteria;return $this->collAuthorArticles;}/*** Returns the number of related AuthorArticle objects.** @param Criteria $criteria* @param boolean $distinct* @param PropelPDO $con* @return int Count of related AuthorArticle objects.* @throws PropelException*/public function countAuthorArticles(Criteria $criteria = null, $distinct = false, PropelPDO $con = null){if ($criteria === null) {$criteria = new Criteria(ArticlePeer::DATABASE_NAME);} else {$criteria = clone $criteria;}if ($distinct) {$criteria->setDistinct();}$count = null;if ($this->collAuthorArticles === null) {if ($this->isNew()) {$count = 0;} else {$criteria->add(AuthorArticlePeer::ARTICLE_ID, $this->id);$count = AuthorArticlePeer::doCount($criteria, false, $con);}} else {// criteria has no effect for a new objectif (!$this->isNew()) {// the following code is to determine if a new query is// called for. If the criteria is the same as the last// one, just return count of the collection.$criteria->add(AuthorArticlePeer::ARTICLE_ID, $this->id);if (!isset($this->lastAuthorArticleCriteria) || !$this->lastAuthorArticleCriteria->equals($criteria)) {$count = AuthorArticlePeer::doCount($criteria, false, $con);} else {$count = count($this->collAuthorArticles);}} else {$count = count($this->collAuthorArticles);}}return $count;}/*** Method called to associate a AuthorArticle object to this object* through the AuthorArticle foreign key attribute.** @param AuthorArticle $l AuthorArticle* @return void* @throws PropelException*/public function addAuthorArticle(AuthorArticle $l){if ($this->collAuthorArticles === null) {$this->initAuthorArticles();}if (!in_array($l, $this->collAuthorArticles, true)) { // only add it if the **same** object is not already associatedarray_push($this->collAuthorArticles, $l);$l->setArticle($this);}}/*** If this collection has already been initialized with* an identical criteria, it returns the collection.* Otherwise if this Article is new, it will return* an empty collection; or if this Article has previously* been saved, it will retrieve related AuthorArticles from storage.** This method is protected by default in order to keep the public* api reasonable. You can provide public methods for those you* actually need in Article.*/public function getAuthorArticlesJoinAuthor($criteria = null, $con = null, $join_behavior = Criteria::LEFT_JOIN){if ($criteria === null) {$criteria = new Criteria(ArticlePeer::DATABASE_NAME);}elseif ($criteria instanceof Criteria){$criteria = clone $criteria;}if ($this->collAuthorArticles === null) {if ($this->isNew()) {$this->collAuthorArticles = array();} else {$criteria->add(AuthorArticlePeer::ARTICLE_ID, $this->id);$this->collAuthorArticles = AuthorArticlePeer::doSelectJoinAuthor($criteria, $con, $join_behavior);}} else {// the following code is to determine if a new query is// called for. If the criteria is the same as the last// one, just return the collection.$criteria->add(AuthorArticlePeer::ARTICLE_ID, $this->id);if (!isset($this->lastAuthorArticleCriteria) || !$this->lastAuthorArticleCriteria->equals($criteria)) {$this->collAuthorArticles = AuthorArticlePeer::doSelectJoinAuthor($criteria, $con, $join_behavior);}}$this->lastAuthorArticleCriteria = $criteria;return $this->collAuthorArticles;}/*** Clears out the collAttachments collection (array).** This does not modify the database; however, it will remove any associated objects, causing* them to be refetched by subsequent calls to accessor method.** @return void* @see addAttachments()*/public function clearAttachments(){$this->collAttachments = null; // important to set this to NULL since that means it is uninitialized}/*** Initializes the collAttachments collection (array).** By default this just sets the collAttachments collection to an empty array (like clearcollAttachments());* however, you may wish to override this method in your stub class to provide setting appropriate* to your application -- for example, setting the initial array to the values stored in database.** @return void*/public function initAttachments(){$this->collAttachments = array();}/*** Gets an array of Attachment objects which contain a foreign key that references this object.** If this collection has already been initialized with an identical Criteria, it returns the collection.* Otherwise if this Article has previously been saved, it will retrieve* related Attachments from storage. If this Article is new, it will return* an empty collection or the current collection, the criteria is ignored on a new object.** @param PropelPDO $con* @param Criteria $criteria* @return array Attachment[]* @throws PropelException*/public function getAttachments($criteria = null, PropelPDO $con = null){if ($criteria === null) {$criteria = new Criteria(ArticlePeer::DATABASE_NAME);}elseif ($criteria instanceof Criteria){$criteria = clone $criteria;}if ($this->collAttachments === null) {if ($this->isNew()) {$this->collAttachments = array();} else {$criteria->add(AttachmentPeer::ARTICLE_ID, $this->id);AttachmentPeer::addSelectColumns($criteria);$this->collAttachments = AttachmentPeer::doSelect($criteria, $con);}} else {// criteria has no effect for a new objectif (!$this->isNew()) {// the following code is to determine if a new query is// called for. If the criteria is the same as the last// one, just return the collection.$criteria->add(AttachmentPeer::ARTICLE_ID, $this->id);AttachmentPeer::addSelectColumns($criteria);if (!isset($this->lastAttachmentCriteria) || !$this->lastAttachmentCriteria->equals($criteria)) {$this->collAttachments = AttachmentPeer::doSelect($criteria, $con);}}}$this->lastAttachmentCriteria = $criteria;return $this->collAttachments;}/*** Returns the number of related Attachment objects.** @param Criteria $criteria* @param boolean $distinct* @param PropelPDO $con* @return int Count of related Attachment objects.* @throws PropelException*/public function countAttachments(Criteria $criteria = null, $distinct = false, PropelPDO $con = null){if ($criteria === null) {$criteria = new Criteria(ArticlePeer::DATABASE_NAME);} else {$criteria = clone $criteria;}if ($distinct) {$criteria->setDistinct();}$count = null;if ($this->collAttachments === null) {if ($this->isNew()) {$count = 0;} else {$criteria->add(AttachmentPeer::ARTICLE_ID, $this->id);$count = AttachmentPeer::doCount($criteria, false, $con);}} else {// criteria has no effect for a new objectif (!$this->isNew()) {// the following code is to determine if a new query is// called for. If the criteria is the same as the last// one, just return count of the collection.$criteria->add(AttachmentPeer::ARTICLE_ID, $this->id);if (!isset($this->lastAttachmentCriteria) || !$this->lastAttachmentCriteria->equals($criteria)) {$count = AttachmentPeer::doCount($criteria, false, $con);} else {$count = count($this->collAttachments);}} else {$count = count($this->collAttachments);}}return $count;}/*** Method called to associate a Attachment object to this object* through the Attachment foreign key attribute.** @param Attachment $l Attachment* @return void* @throws PropelException*/public function addAttachment(Attachment $l){if ($this->collAttachments === null) {$this->initAttachments();}if (!in_array($l, $this->collAttachments, true)) { // only add it if the **same** object is not already associatedarray_push($this->collAttachments, $l);$l->setArticle($this);}}/*** Resets all collections of referencing foreign keys.** This method is a user-space workaround for PHP's inability to garbage collect objects* with circular references. This is currently necessary when using Propel in certain* daemon or large-volumne/high-memory operations.** @param boolean $deep Whether to also clear the references on all associated objects.*/public function clearAllReferences($deep = false){if ($deep) {if ($this->collAuthorArticles) {foreach ((array) $this->collAuthorArticles as $o) {$o->clearAllReferences($deep);}}if ($this->collAttachments) {foreach ((array) $this->collAttachments as $o) {$o->clearAllReferences($deep);}}} // if ($deep)$this->collAuthorArticles = null;$this->collAttachments = null;$this->aCategory = null;$this->aBook = null;}// symfony_behaviors behavior/*** Calls methods defined via {@link sfMixer}.*/public function __call($method, $arguments){if (!$callable = sfMixer::getCallable('BaseArticle:'.$method)){throw new sfException(sprintf('Call to undefined method BaseArticle::%s', $method));}array_unshift($arguments, $this);return call_user_func_array($callable, $arguments);}} // BaseArticle