377 Stimmen

Laravel - Eloquent oder Fluent zufällige Zeile

Wie kann ich eine zufällige Zeile mit Eloquent oder Fluent in Laravel Framework auswählen?

Ich weiß, dass man mit SQL eine Bestellung nach RAND() durchführen kann. Ich möchte jedoch die zufällige Zeile erhalten ohne eine Zählung der Anzahl der Datensätze vor der ersten Abfrage vorzunehmen.

Irgendwelche Ideen?

3voto

Brad Ahrens Punkte 4277

Laravel hat eine eingebaute Methode, um die Reihenfolge der Ergebnisse zu mischen.

Hier ist ein Zitat aus der Dokumentation:

shuffle()

Die Shuffle-Methode mischt die Elemente in der Sammlung nach dem Zufallsprinzip:

$collection = collect([1, 2, 3, 4, 5]);

$shuffled = $collection->shuffle();

$shuffled->all();

// [3, 2, 5, 1, 4] - (generated randomly)

Sie können die Dokumentation hier .

3voto

ctf0 Punkte 6354

Außerdem gibt es whereRaw('RAND()') das dasselbe tut, können Sie dann die Kette ->get() ou ->first() oder sogar verrückt werden und hinzufügen ->paginate(int) .

2voto

Neto Braghetto Punkte 1371

Bei Ihrem Modell fügen Sie dies hinzu:

public function scopeRandomize($query, $limit = 3, $exclude = [])
{
    $query = $query->whereRaw('RAND()<(SELECT ((?/COUNT(*))*10) FROM `products`)', [$limit])->orderByRaw('RAND()')->limit($limit);
    if (!empty($exclude)) {
        $query = $query->whereNotIn('id', $exclude);
    }
    return $query;
}

dann bei Route/Controller

$data = YourModel::randomize(8)->get();

2voto

giovannipds Punkte 2123

Ich ziehe es vor, zuerst anzugeben oder zu scheitern:

$collection = YourModelName::inRandomOrder()
  ->firstOrFail();

2voto

hackernewbie Punkte 1086

So erhalte ich zufällige Ergebnisse in eloquent in einem meiner Projekte:

$products           =  Product::inRandomOrder()->limit(10);

10 - Die Anzahl der zufällig zu ziehenden Datensätze.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X