Commit 0455438e by Taylor Otwell

Added transaction method to database connection and eloquent model.

parent fcff36a0
...@@ -85,6 +85,33 @@ class Connection { ...@@ -85,6 +85,33 @@ class Connection {
} }
/** /**
* Execute a callback wrapped in a database transaction.
*
* @param Closure $callback
* @return void
*/
public function transaction($callback)
{
$this->pdo->beginTransaction();
// After beginning the database transaction, we will call the Closure
// so that it can do its database work. If an exception occurs we'll
// rollback the transaction and re-throw back to the developer.
try
{
call_user_func($callback);
}
catch (\Exception $e)
{
$this->pdo->rollBack();
throw $e;
}
$this->pdo->commit();
}
/**
* Execute a SQL query against the connection and return a single column result. * Execute a SQL query against the connection and return a single column result.
* *
* <code> * <code>
......
...@@ -104,17 +104,6 @@ abstract class Model { ...@@ -104,17 +104,6 @@ abstract class Model {
} }
/** /**
* Set the accessible attributes for the given model.
*
* @param array $attributes
* @return void
*/
public static function accessible($attributes)
{
static::$accessible = $attributes;
}
/**
* Hydrate the model with an array of attributes. * Hydrate the model with an array of attributes.
* *
* @param array $attributes * @param array $attributes
...@@ -158,6 +147,28 @@ abstract class Model { ...@@ -158,6 +147,28 @@ abstract class Model {
} }
/** /**
* Set the accessible attributes for the given model.
*
* @param array $attributes
* @return void
*/
public static function accessible($attributes)
{
static::$accessible = $attributes;
}
/**
* Execute a callback wrapped in a database transaction.
*
* @param Closure $callback
* @return void
*/
public static function transaction($callback)
{
with(new static)->query()->connection()->transaction($callback);
}
/**
* Create a new model and store it in the database. * Create a new model and store it in the database.
* *
* If save is successful, the model will be returned, otherwise false. * If save is successful, the model will be returned, otherwise false.
...@@ -211,9 +222,7 @@ abstract class Model { ...@@ -211,9 +222,7 @@ abstract class Model {
*/ */
public static function all() public static function all()
{ {
$model = new static; return with(new static)->query()->get();
return $model->query()->get();
} }
/** /**
......
...@@ -243,7 +243,7 @@ class Query { ...@@ -243,7 +243,7 @@ class Query {
* *
* @return Connection * @return Connection
*/ */
protected function connection() public function connection()
{ {
return Database::connection($this->model->connection()); return Database::connection($this->model->connection());
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment