Übergeben von Variablen an einen Filter in einem Recordset oder einer Sammlung

StackOverflow https://stackoverflow.com/questions/9375305

  •  28-10-2019
  •  | 
  •  

Frage

Ich habe also eine Variable und ein Recordset:

$firstRecordID = 1;
$records = Recordset::all();

Ich möchte das Recordset filtern:

$filteredRecords = $records->find(function($record){
    if($record->id == $firstRecordID)
        return true;
    else
        return false;
});

Leider hat der Abschluss keine Ahnung, was $ firstRecordID ist.

Wie gebe ich die ID weiter?

War es hilfreich?

Lösung

Sie können die $ firstRecordID an den Abschluss binden:

$firstRecordID = 1;
$records = Recordset::all();

$filterFunction = function ($record) use ($firstRecordID) {
    return ($record->id == $firstRecordID);
};

$filteredRecords = $records->find($filterFunction);

Ich habe auch Ihr Lambda in einer einzigen Zeile vereinfacht.

Andere Tipps

Es ist vielleicht eine dumme Frage, aber warum wird alles anschließend manuell gefiltert, wenn das ODM dies direkt tun kann?

$records = Recordset::all(array(
    'conditions' => array(
        'id' => array('<>' => $firstRecordID)
    )
));

Auch wenn das Ergebnis nicht viel kleiner ist als bei all(), sieht es mit dem richtigen Werkzeug für den richtigen Zweck viel sauberer aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top