Skip to content

Commit

Permalink
Fix integrity constraints for database session driver.
Browse files Browse the repository at this point in the history
  • Loading branch information
taylorotwell committed Jan 2, 2017
1 parent c64f4bf commit d9e0a6a
Showing 1 changed file with 31 additions and 2 deletions.
33 changes: 31 additions & 2 deletions src/Illuminate/Session/DatabaseSessionHandler.php
Expand Up @@ -6,6 +6,7 @@
use Illuminate\Support\Arr;
use SessionHandlerInterface;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Database\QueryException;
use Illuminate\Database\ConnectionInterface;
use Illuminate\Contracts\Container\Container;

Expand Down Expand Up @@ -123,14 +124,42 @@ public function write($sessionId, $data)
}

if ($this->exists) {
$this->getQuery()->where('id', $sessionId)->update($payload);
$this->performUpdate($sessionId, $payload);
} else {
$this->getQuery()->insert(Arr::set($payload, 'id', $sessionId));
$this->performInsert($sessionId, $payload);
}

return $this->exists = true;
}

/**
* Perform an insert operation on the session ID.
*
* @param string $sessionId
* @param string $payload
* @return void
*/
protected function performInsert($sessionId, $payload)
{
try {
return $this->getQuery()->insert(Arr::set($payload, 'id', $sessionId));
} catch (QueryException $e) {
$this->performUpdate($sessionId, $payload);
}
}

/**
* Perform an update operation on the session ID.
*
* @param string $sessionId
* @param string $payload
* @return int
*/
protected function performUpdate($sessionId, $payload)
{
return $this->getQuery()->where('id', $sessionId)->update($payload);
}

/**
* Get the default payload for the session.
*
Expand Down

0 comments on commit d9e0a6a

Please sign in to comment.