/ / Beste Weg, um diese Auflistung Laravel mit Beziehung zu tun - Laravel, Beredsamkeit, Beziehung

Der beste Weg, um diese Auflistung Laravel mit Beziehung - Laravel, eloquent, Beziehung

Was ist der beste Weg, um diese Auflistung zu machen?

Ich würde es nicht so "hässlich" machen wollen.

/**
* Get user indicateds
* @return array|null
*/
static public function indicateds()
{
$users = ModelUser::all();
foreach( $users as $user ) {
if( $user->financial->status_payment ) {
$newArray[] = $user;
}
}
return (isset($newArray) ? $newArray : null);
}

Vielen Dank

Antworten:

1 für die Antwort № 1

Sie können die Sammlung "s" verwenden filter Methode:

return ModelUser::with("financial")
->get()
->filter(function($user) {
return $user->financial->status_payment;
});

Ich nehme an, Sie haben das definiert finanziell beziehung und du solltest sie eifrig laden wie ich, um die leistung zu verbessern.


-1 für die Antwort № 2

Einer der Vorteile von Beziehungen besteht darin, dass Sie sie auch zum Ändern Ihrer Abfragen verwenden können. Also, anstatt alle Benutzer in eine Collectionund dann filtern Collectionkönnen Sie die Beziehung verwenden, um diefragen Sie ab, damit Sie nur die gewünschten Datensätze erhalten. Dies reduziert die Anzahl der von der Datenbank zurückgegebenen Datensätze sowie die Anzahl der Modellinstanzen, die erstellt werden. So sparen Sie Zeit und Speicher.

$users = ModelUser::with("financial")
->whereHas("financial", function($q) {
// $q is the query for the financial relationship;
return $q->where("status_payment", true);
}
->get();

Das with() ist nicht erforderlich, aber wenn Sie auf die zugreifen financial Beziehung auf die zurückgegebenen Benutzer, ist es eine gute Idee, es eifrig zu laden.

Das whereHas() Hier geschieht die Magie. Die Abfrage wird so geändert, dass nur Benutzer zurückgegeben werden, für die eine Beziehung besteht financial Datensatz, der den Bedingungen entspricht, die durch den im zweiten Parameter verwendeten Abschluss hinzugefügt wurden.

Sie können mehr darüber im lesen Dokumentation hier.