Laravel 中如何从数据库中获取随机的数据?
發表於 : 2018-11-14 17:20:47
https://laravel-china.org/index.php/wikis/16199
Laravel >= 5.2 可以使用:
User::inRandomOrder()->get();
或者随机读取一条信息:
User::inRandomOrder()->first();
请注意以下的这种查询方式只能支持 MySQL 数据库:
User::orderByRaw("RAND()")->get();
如果你自己要实现类似于 inRandomOrder 的功能,并支持不同的数据库驱动,可以参考以下:
use Illuminate\Database\Query\Builder;
Builder::macro('orderByRandom', function () {
$randomFunctions = [
'mysql' => 'RAND()',
'pgsql' => 'RANDOM()',
'sqlite' => 'RANDOM()',
'sqlsrv' => 'NEWID()',
];
$driver = $this->getConnection()->getDriverName();
return $this->orderByRaw($randomFunctions[$driver]);
});
Laravel >= 5.2 可以使用:
User::inRandomOrder()->get();
或者随机读取一条信息:
User::inRandomOrder()->first();
请注意以下的这种查询方式只能支持 MySQL 数据库:
User::orderByRaw("RAND()")->get();
如果你自己要实现类似于 inRandomOrder 的功能,并支持不同的数据库驱动,可以参考以下:
use Illuminate\Database\Query\Builder;
Builder::macro('orderByRandom', function () {
$randomFunctions = [
'mysql' => 'RAND()',
'pgsql' => 'RANDOM()',
'sqlite' => 'RANDOM()',
'sqlsrv' => 'NEWID()',
];
$driver = $this->getConnection()->getDriverName();
return $this->orderByRaw($randomFunctions[$driver]);
});