本文整理汇总了PHP中PropelPDO::beginTransaction方法的典型用法代码示例。如果您正苦于以下问题:PHP PropelPDO::beginTransaction方法的具体用法?PHP PropelPDO::beginTransaction怎么用?PHP PropelPDO::beginTransaction使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PropelPDO
的用法示例。
在下文中一共展示了PropelPDO::beginTransaction方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: setUp
protected function setUp()
{
parent::setUp();
if (!class_exists('Propel\\Bundle\\PropelBundle\\Tests\\Fixtures\\DataFixtures\\Loader\\CoolBook')) {
$schema = <<<XML
<database name="default" package="vendor.bundles.Propel.Bundle.PropelBundle.Tests.Fixtures.DataFixtures.Loader" namespace="Propel\\Bundle\\PropelBundle\\Tests\\Fixtures\\DataFixtures\\Loader" defaultIdMethod="native">
<table name="cool_book">
<column name="id" type="integer" primaryKey="true" />
<column name="name" type="varchar" size="255" />
<column name="description" type="varchar" />
<column name="author_id" type="integer" required="false" defaultValue="null" />
<column name="complementary_infos" required="false" type="object" description="An object column" />
<foreign-key foreignTable="cool_book_author" onDelete="CASCADE" onUpdate="CASCADE">
<reference local="author_id" foreign="id" />
</foreign-key>
</table>
<table name="cool_book_author">
<column name="id" type="integer" primaryKey="true" />
<column name="name" type="varchar" size="255" />
</table>
</database>
XML;
QuickBuilder::buildSchema($schema);
}
$this->con = Propel::getServiceContainer()->getConnection('default');
$this->con->beginTransaction();
}
示例2: exec
public static function exec($callable, $arrArgs, $action, $creator = null, $related = null, PropelPDO $con)
{
if (!$con->beginTransaction()) {
throw new Exception('Could not begin transaction');
}
try {
$resIsArray = $res = false;
$res = $return = call_user_func_array($callable, $arrArgs);
$resIsArray = is_array($res);
if ($resIsArray) {
if (isset($res[self::ARR_RESULT_RETURN_KEY])) {
$return = $res[self::ARR_RESULT_RETURN_KEY];
unset($res[self::ARR_RESULT_RETURN_KEY]);
}
if (!$related && isset($res[self::ARR_RELATED_RETURN_KEY])) {
$related = $res[self::ARR_RELATED_RETURN_KEY];
unset($res[self::ARR_RELATED_RETURN_KEY]);
}
}
self::insert($action, self::TYPE_SUCCESS, $creator, $related, $resIsArray ? $res : [$res], null, $con);
if (!$con->commit()) {
throw new Exception('Could not commit transaction');
}
return $return;
} catch (Exception $e) {
$con->rollBack();
$activity = self::insert($action, self::TYPE_FAILURE, $creator, $related, $resIsArray ? $res : [$res], $e, $con);
self::$_ActivityExceptions[] = $activity->toArray();
throw $e;
}
}
示例3: updateAncestorsTree
/**
* Update all ancestor entries to reflect changes on this instance.
*
* @param \PropelPDO $con
*
* @return \Propel\Bundle\PropelAclBundle\Model\Acl\ObjectIdentity $this
*/
protected function updateAncestorsTree(\PropelPDO $con = null)
{
$con->beginTransaction();
$oldAncestors = ObjectIdentityQuery::create()->findAncestors($this, $con);
$children = ObjectIdentityQuery::create()->findGrandChildren($this, $con);
$children->append($this);
if (count($oldAncestors)) {
foreach ($children as $eachChild) {
/*
* Delete only those entries, that are ancestors based on the parent relation.
* Ancestors of grand children up to the current node will be kept.
*/
$query = ObjectIdentityAncestorQuery::create()->filterByObjectIdentityId($eachChild->getId())->filterByObjectIdentityRelatedByAncestorId($oldAncestors, \Criteria::IN);
if ($eachChild->getId() !== $this->getId()) {
$query->filterByAncestorId(array($eachChild->getId(), $this->getId()), \Criteria::NOT_IN);
} else {
$query->filterByAncestorId($this->getId(), \Criteria::NOT_EQUAL);
}
$query->delete($con);
}
}
// This is the new parent object identity!
$parent = $this->getObjectIdentityRelatedByParentObjectIdentityId($con);
if (null !== $parent) {
$newAncestors = ObjectIdentityQuery::create()->findAncestors($parent, $con);
$newAncestors->append($parent);
foreach ($newAncestors as $eachAncestor) {
// This collection contains the current object identity!
foreach ($children as $eachChild) {
$ancestor = ObjectIdentityAncestorQuery::create()->filterByObjectIdentityId($eachChild->getId())->filterByAncestorId($eachAncestor->getId())->findOneOrCreate($con);
// If the entry already exists, next please.
if (!$ancestor->isNew()) {
continue;
}
if ($eachChild->getId() === $this->getId()) {
// Do not save() here, as it would result in an infinite recursion loop!
$this->addObjectIdentityAncestorRelatedByObjectIdentityId($ancestor);
} else {
// Save the new ancestor to avoid integrity constraint violation.
$ancestor->save($con);
$eachChild->addObjectIdentityAncestorRelatedByObjectIdentityId($ancestor)->save($con);
}
}
}
}
$con->commit();
return $this;
}
示例4: doSave
protected function doSave(PropelPDO $con)
{
try {
$con->beginTransaction();
if ($this->countCourseSubjectStudentMarks() == 0) {
for ($i = 1; $i <= $this->getCourseSubject()->getCareerSubjectSchoolYear()->getConfiguration()->getCourseMarks(); $i++) {
$course_subject_student_mark = new CourseSubjectStudentMark();
$course_subject_student_mark->setCourseSubjectStudent($this);
$course_subject_student_mark->setMarkNumber($i);
$last_period_close = $this->getCourseSubject()->getCourse()->getCurrentPeriod() - 1;
if ($i <= $last_period_close) {
$course_subject_student_mark->setIsClosed(true);
// se pone la nota como cerrada
}
$course_subject_student_mark->save($con);
}
}
parent::doSave($con);
$con->commit();
} catch (PropelException $e) {
$con->rollBack();
}
}
示例5: importTransactions
private function importTransactions(Status $logger, array $clockingTypeMap, array $bookingTypesByIdentifier, array $usersByName, array $clockingDataByOldID, PDO $source, PropelPDO $dest)
{
if (!$dest->beginTransaction()) {
throw new Exception('Could not start transaction.');
}
try {
$statement = $source->query('SELECT * FROM ext_clockings_transactions');
$logger->info($statement->rowCount());
$oldTransactions = $statement->fetchAll(PDO::FETCH_ASSOC);
$statement->closeCursor();
$statement = null;
foreach ($oldTransactions as $rowIndex => $oldTransaction) {
$authUserName = $oldTransaction['creator'];
$userName = $oldTransaction['username'];
if (empty($usersByName[$userName])) {
$logger->info('Transaction #' . $oldTransaction['ID'] . ' references unknown user "' . $userName . '".');
continue;
}
$transaction = new Transaction();
$dataItems = $this->getTransactionClockingDataItems($logger, $oldTransaction, $clockingDataByOldID, $source);
$clockings = $this->getClockings($dataItems);
if (empty($clockings)) {
$date = (int) $oldTransaction['date'];
$start = $date;
$end = $date;
} else {
list($start, $end) = $this->getClockingRange($clockings);
foreach ($clockings as $clocking) {
$transactionClocking = new TransactionClocking();
$transaction->addTransactionClocking($transactionClocking->setTransaction($transaction)->setClocking($clocking));
}
}
// Check transaction / booking consistency
$logger->start('Checking consistency of new transactions & bookings');
$worktimeId = $bookingTypesByIdentifier['regular']->getId();
$flexitimeId = $bookingTypesByIdentifier['flexitime']->getId();
$overtimeId = $bookingTypesByIdentifier['overtime']->getId();
$vacationId = $bookingTypesByIdentifier['vacation']->getId();
$sickLeaveId = $bookingTypesByIdentifier['sick_leave']->getId();
$educationId = $bookingTypesByIdentifier['education']->getId();
$actualTimes = array($worktimeId => 0.0, $flexitimeId => 0.0, -$flexitimeId => 0.0, $overtimeId => 0.0, $vacationId => 0.0, $sickLeaveId => 0.0, $educationId => 0.0);
//$actualDenied = 0;
$bookings = $this->createBookings($logger, $dataItems, $bookingTypesByIdentifier, $dest);
foreach ($bookings as $booking) {
$bookingTypeId = $booking->getBookingTypeId();
if (!isset($actualTimes[$bookingTypeId])) {
throw new Exception('Unknown booking type #' . $bookingTypeId . ' specified for booking #' . $booking->getId() . '.');
}
$value = $booking->getValue();
if ($bookingTypeId === $flexitimeId and $value < 0) {
$actualTimes[-$bookingTypeId] += $value;
} else {
$actualTimes[$bookingTypeId] += $value;
}
$transaction->addBooking($booking);
}
$transaction->setUserRelatedByCreatorId($usersByName[$authUserName])->setUserRelatedByUserId($usersByName[$userName])->setStart($start)->setEnd($end)->setCreationdate((int) $oldTransaction['creationdate'])->setComment($oldTransaction['comment'])->setDeleted($oldTransaction['visibility'])->save($dest);
// Cross-check times of bookings and transaction
#$this->failTimeDelta($logger, $oldTransaction, 'time', $actualTimes[$worktimeId] + $actualTimes[$flexitimeId] + $actualTimes[$overtimeId], $bookings);
#$this->failTimeDelta($logger, $oldTransaction, 'time', $actualTimes[$worktimeId], $bookings);
$this->failTimeDelta($logger, $oldTransaction, 'flexitime', $actualTimes[$flexitimeId] + $actualTimes[-$flexitimeId], $bookings);
$this->failTimeDelta($logger, $oldTransaction, 'overtime', $actualTimes[$overtimeId], $bookings);
//$this->failTimeDelta($logger, $oldTransaction, 'denied', $actualDenied, $bookings);
$logger->done();
}
} catch (Exception $e) {
$dest->rollBack();
throw $e;
}
if (!$dest->commit()) {
throw new Exception('Could not commit transaction.');
}
}
示例6: delete
public function delete(PropelPDO $con = null)
{
$con->beginTransaction();
try {
TestableAggregateCommentQuery::create()->filterByPrimaryKey($this->getPrimaryKey())->delete($con);
$con->commit();
$this->setDeleted(true);
} catch (PropelException $e) {
$con->rollBack();
throw $e;
}
}
示例7: doExplainPlan
/**
* Do Explain Plan for query object or query string
*
* @param PropelPDO $con propel connection
* @param ModelCriteria|string $query query the criteria or the query string
* @throws PropelException
* @return PDOStatement A PDO statement executed using the connection, ready to be fetched
*/
public function doExplainPlan(PropelPDO $con, $query)
{
$con->beginTransaction();
if ($query instanceof ModelCriteria) {
$params = array();
$dbMap = Propel::getDatabaseMap($query->getDbName());
$sql = BasePeer::createSelectSql($query, $params);
} else {
$sql = $query;
}
// unique id for the query string
$uniqueId = uniqid('Propel', true);
$stmt = $con->prepare($this->getExplainPlanQuery($sql, $uniqueId));
if ($query instanceof ModelCriteria) {
$this->bindValues($stmt, $params, $dbMap);
}
$stmt->execute();
// explain plan is save in a table, data must be commit
$con->commit();
$stmt = $con->prepare($this->getExplainPlanReadQuery($uniqueId));
$stmt->execute();
return $stmt;
}
示例8: beginTransaction
public function beginTransaction()
{
if ($this->getKalturaOption(KalturaPDO::KALTURA_ATTR_NO_TRANSACTION)) {
return true;
}
return parent::beginTransaction();
}
示例9: createFromSignup
public static function createFromSignup($data, $refererMember, Invitation $invitation = null, PropelPDO $con)
{
// This functions expects this parameter to be valid!
// E.g. the result from self::validateSignupForm()
$now = time();
if (!$con->beginTransaction()) {
throw new Exception('Could not begin transaction');
}
try {
$member = new Member();
$member->setFirstName($data['firstName'])->setLastName($data['lastName'])->setEmail($data['email'])->setTitle($data['title'])->setCity($data['city'])->setCountry($data['country'])->setAge($data['age'])->setBankRecipient($data['bank_recipient'])->setIban($data['iban'])->setBic($data['bic'])->setPassword($data['password'])->setSignupDate($now);
if ($invitation) {
$member->setType($invitation->getType());
if ($invitation->getFreeSignup()) {
$member->setPaidDate($now);
}
$invitation->setAcceptedDate($now);
}
$member->setRefererMember($refererMember, $con);
$member->save($con);
if ($invitation) {
$invitation->setAcceptedMemberId($member->getId());
$invitation->save($con);
}
if (!$con->commit()) {
throw new Exception('Could not commit transaction');
}
} catch (Exception $e) {
$con->rollBack();
throw $e;
}
return $member;
}
示例10: createBookingsTransactions
/**
* Creates booking and transaction records from array data.
*
* @param User $authUser The user creating the transactions.
* @param User $user The user to associate the transactions with.
* @param array $bookingData An associative array mapping internal
* identifiers to booking record data that can be passed to
* {@link Booking::fromArray()}. The internal identifiers can be
* referenced in the transaction data.
* @param array $bookingTypeIds An associative array with booking type IDs
* (in the keys) to allow.
* @param array $transactionData An array of transaction record data
* suitable for {@link Transaction::fromArray()} and with two additional
* properties:
* - "Bookings" with an array of internal booking identifiers and
* - "Clockings" with an array of clocking IDs to link to the transaction.
* @return array An array with two elements:
* 1. An associative array mapping IDs of clockings for which
* transactions were created to themselves.
* 2. An array of the created transactions.
*/
private function createBookingsTransactions(User $authUser, User $user, array $bookingData, array $bookingTypeIds, array $transactionData, PropelPDO $con)
{
$resultClockingIds = array();
$transactions = array();
if (!$con->beginTransaction()) {
throw new Exception('Could not start transaction.');
}
try {
// Create bookings
$bookingsByKey = $this->createBookings($bookingData, $bookingTypeIds, $con);
$orphanedBookings = $bookingsByKey;
// Create transactions and link them to clockings and new bookings
foreach ($transactionData as $transactionItem) {
if (!isset($transactionItem['Start'], $transactionItem['End'])) {
throw new Exception('Invalid transaction data (missing start and/or end date): ' . json_encode($transactionItem));
} elseif (empty($transactionItem['Clockings'])) {
// This could be allowed to support artificial transactions
throw new Exception('Plugins created a transaction not linked to any clockings: ' . json_encode($transactionItem));
}
$clockingIds = $transactionItem['Clockings'];
if (!is_array($clockingIds)) {
throw new Exception('"Clockings" property of transaction record must specify an array of clocking database IDs. Transaction record: ' . json_encode($transactionItem));
}
$transaction = new Transaction();
$transaction->fromArray(array_intersect_key($transactionItem, array('Start' => true, 'End' => true, 'Comment' => true, 'Type' => true)));
$transaction->setUserRelatedByCreatorId($authUser)->setUserRelatedByUserId($user)->save($con);
if (!empty($transactionItem['Bookings'])) {
$bookingKeys = $transactionItem['Bookings'];
if (!is_array($bookingKeys)) {
throw new Exception('"Bookings" property of transaction record must specify an array of internal booking identifiers. Transaction record: ' . json_encode($transactionItem));
}
$bookingKeys = $this->linkTransactionBookings($transaction, $bookingsByKey, $bookingKeys, $bookingTypeIds, $con);
// Remove from orphans list
$orphanedBookings = array_diff_key($orphanedBookings, array_fill_keys($bookingKeys, true));
}
if (!empty($clockingIds)) {
$clockings = ClockingAPI::createClockingQuery($user, $con)->findPks($clockingIds, $con)->getArrayCopy('Id');
// Prevents duplicated rows - don't ask why, but this query produces duplicates.
$missingClockingIds = array_diff_key(array_fill_keys($clockingIds, true), $clockings);
if (!empty($missingClockingIds)) {
throw new Exception('Could not find clockings with these IDs: ' . implode(', ', array_keys($missingClockingIds)));
}
$this->linkTransactionClockings($transaction, $clockings, $con);
$resultClockingIds += array_combine($clockingIds, $clockingIds);
}
$transactions[] = $transaction;
}
if (!empty($orphanedBookings)) {
throw new Exception('Plugins created ' . count($orphanedBookings) . ' booking(s) not linked to any transactions.');
}
} catch (Exception $e) {
$con->rollBack();
throw $e;
}
if (!$con->commit()) {
throw new Exception('Could not commit transaction.');
}
return array($resultClockingIds, $transactions);
}
示例11: createFromSignup
public function createFromSignup($data, $referrerMember, \Invitation $invitation = null, \PropelPDO $con)
{
// This functions expects this parameter to be valid!
// E.g. the result from $this->validateSignupForm()
$now = time();
if (!$con->beginTransaction()) {
throw new \Exception('Could not begin transaction');
}
try {
$member = new \Member();
$member->setFirstName($data['firstName'])->setLastName($data['lastName'])->setEmail($data['email'])->setTitle($data['title'])->setCity($data['city'])->setZipCode($data['zip_code'])->setCountry('India')->setAge($data['age'])->setBankRecipient($data['bank_recipient'])->setIban($data['iban'])->setBic($data['bic'])->setPassword($data['password'])->setSignupDate($now)->setBonusIds('{}')->setPaidDate(null)->setIsExtended(1);
$member->setHash(\Member::calcHash($member));
$wasFreeInvitation = false;
if ($invitation) {
$invitationType = $invitation->getType();
$member->setType($invitationType);
// Special case if e.g. director invites another director.
// The referrer of the referrer will be the referrer.
// This is necessary because the same type can not be on same line vertical
// but horizontal. E.g. Director can have more marketing leader under him
// but only Directors next to him (NOT under him)
if ($invitationType > \Member::TYPE_MEMBER && $referrerMember->getType() == $invitationType) {
$referrerMember = $referrerMember->getReferrerMember();
}
$invitation->setAcceptedDate($now);
if ($invitation->getFreeSignup()) {
$member->setFreeInvitation(1);
$wasFreeInvitation = true;
}
// Deprecated code
// if ( $invitation->getType() === \Member::TYPE_SUB_PROMOTER ) {
// $member->setSubPromoterReferral($invitation->getMeta()['promoter_id']);
// }
}
$member->setReferrerMember($referrerMember, $con);
$member->save($con);
$member->setNum($member->getId() + 1000000);
if ($invitation) {
$invitation->setAcceptedMemberId($member->getId());
$invitation->save($con);
if ($wasFreeInvitation) {
$member->onReceivedMemberFee(\Transaction::$BASE_CURRENCY, $now, true, $con);
}
}
if ($wasFreeInvitation) {
\Tbmt\MailHelper::sendFreeSignupConfirm($member);
\Tbmt\MailHelper::sendNewFreeRecruitmentCongrats($referrerMember, $member);
} else {
\Tbmt\MailHelper::sendSignupConfirm($member);
\Tbmt\MailHelper::sendNewRecruitmentCongrats($referrerMember, $member);
}
$member->save($con);
if (!$con->commit()) {
throw new \Exception('Could not commit transaction');
}
} catch (\Exception $e) {
$con->rollBack();
throw $e;
}
return $member;
}