Forked from vluzrmos/HasRandomStatementTrait.php
Last active
August 29, 2015 14:26
-
-
Save vs0uz4/18fb005a7b7c18f9bd78 to your computer and use it in GitHub Desktop.
Laravel Eloquent Agnostic Random Statement
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
trait HasRandomStatementTrait | |
{ | |
/** | |
* Random Statements by driver name. | |
* @var array | |
*/ | |
protected $randomStatements = [ | |
'mysql' => 'RAND()', | |
'pgsql' => 'RANDOM()', | |
'sqlite' => 'RANDOM()', | |
'sqlsrv' => 'NEWID()', | |
]; | |
/** | |
* Scope to order by random statement. | |
* | |
* @param \Illuminate\Database\Query\Builder $query | |
* @param string $driver | |
* @return \Illuminate\Database\Query\Builder | |
*/ | |
public function scopeOrderByRandom($query, $driver = null) | |
{ | |
return $query->orderByRaw($this->getRandomStatement($driver)); | |
} | |
/** | |
* Get random statement for a given driver name. | |
* | |
* @param string $driver | |
* @return string | |
*/ | |
public function getRandomStatement($driver = null) | |
{ | |
$driver = $driver ?: $this->getCurrentDriverName(); | |
return isset($random = $this->randomStatements[$driver]) ? $random : "RAND()"; | |
} | |
/** | |
* Get the driver name for the current connection. | |
* | |
* @return string | |
*/ | |
public function getCurrentDriverName() | |
{ | |
return $this->getConnection()->getDriverName(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment