tl; dr: আজকাল এটি লারাভেলে প্রয়োগ করা হয়েছে, নীচে "3 সম্পাদনা করুন" দেখুন।
দুঃখের বিষয়, আজকের মতো ->orderBy(DB::raw('RAND()'))
প্রস্তাবিত সমাধান সহ কয়েকটি সতর্কতা রয়েছে :
- এটি ডিবি-অজোনস্টিক নয়। যেমন SQLite এবং PostgreSQL ব্যবহার
RANDOM()
আরও খারাপ, এই সমাধানটির পরে এই পরিবর্তনটি কার্যকর হয় না :
$direction = strtolower($direction) == 'asc' ? 'asc' : 'desc';
সম্পাদনা: এখন আপনি ব্যবহার করতে পারেন orderByRaw () পদ্ধতি: ->orderByRaw('RAND()')
। তবে এটি এখনও ডিবি-অজোনস্টিক নয়।
এফডাব্লুআইডাব্লু, কোডআইগিনিটার একটি বিশেষ RANDOM
বাছাই করার দিকনির্দেশ প্রয়োগ করে , যা ক্যোয়ারী তৈরি করার সময় সঠিক ব্যাকরণ দিয়ে প্রতিস্থাপন করা হয়। এছাড়াও এটি প্রয়োগ করা মোটামুটি সহজ বলে মনে হচ্ছে। দেখে মনে হচ্ছে লারাভেলকে উন্নত করার জন্য আমাদের কাছে প্রার্থী আছে :)
আপডেট: এখানে গিটহাবের বিষয়ে এই বিষয়টি এবং আমার মুলতুবি টানার অনুরোধ রয়েছে ।
সম্পাদনা 2: এর ধাওয়া কাটা যাক। লারাভেল 5.1.18 যেহেতু আপনি ক্যোয়ারী বিল্ডারে ম্যাক্রোগুলি যুক্ত করতে পারেন:
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]);
});
ব্যবহার:
User::where('active', 1)->orderByRandom()->limit(10)->get();
DB::table('users')->where('active', 1)->orderByRandom()->limit(10)->get();
3 সম্পাদনা করুন: অবশেষে! Laravel 5.2.33 (যেহেতু পরিবর্তণের , : PR # 13642 ) আপনি নেটিভ পদ্ধতি ব্যবহার করতে পারেন inRandomOrder()
:
User::where('active', 1)->inRandomOrder()->limit(10)->get();
DB::table('users')->where('active', 1)->inRandomOrder()->limit(10)->get();