muharremozdemir
// Session olmadığı için cache key olarak kullanacağımız özel bir anahtar oluşturuyoruz.
// Kullanıcı id'si kullanarak diğer kullanıcıların verisi ile karışmasını engelliyoruz.
// 5.except_ids gibi bir key olacak. Bu key ile önbellekte tekrar görmek istemediğimiz
// kullanıcı id'lerini array olarak tutacağız.
$cacheKey = $request->user()->id.'.except_ids';
// Önce mevcut olanları çekiyoruz. Yoksa içinde giriş yapan kullanıcının id'sini barındıran
// bir array gelecek. Böylece giriş yapan kullanıcı otomatik olarak dışlanan listesinde
// yer alacak ve kendisi karşısına çıkmayacak.
$exceptIds = Cache::get($cacheKey, [
$request->user()->id
]);
// Eğer önbellekte kayıtlı olan kullanıcı varsa onları dahil etmeyeceğiz, böylece her seferinde
// farklı bir kullanıcı gelecek.
$randomUser = User::when($exceptIds, function($query, $ids) {
$query->whereNotIn('id', $ids);
})
->inRandomOrder()
->first();
// Eğer bir kullanıcı gelirse onu da mevcut dışlanan kullanıcı id'lerinin içine ekleyip
// önbellekte tuttuğumuz kaydı güncelliyoruz. Böylece bu kodlar tekrar
// çalıştığında bu kullanıcı da gelmeyecek.
if($randomUser) {
array_push($exceptIds, $randomUser->id);
Cache::put($cacheKey, $exceptIds);
}
// Örneğin giriş yapan kullanıcı id'si 5 ise ve rastgele gelen kullanıcı id'si 13 ise
// önbellekteki 5.except_ids keyinin değeri [5, 13] olacak. Bu kod tekrar
// çalıştığında id'si 5 ya da 13 olmayan kullanıcılardan biri gelecek.
// Bundan sonra eğer $randomUser varsa onunla ilgili işlemler yapabiliriz...