Come passare le variabili in un filtro su un recordset o una raccolta
Domanda
Quindi ho una variabile e un recordset:
$firstRecordID = 1;
$records = Recordset::all();
Voglio filtrare il recordset:
$filteredRecords = $records->find(function($record){
if($record->id == $firstRecordID)
return true;
else
return false;
});
Sfortunatamente, la chiusura non ha idea di cosa sia $ firstRecordID.
Come si trasmette l'ID?
Soluzione
Puoi associare $ firstRecordID alla chiusura:
$firstRecordID = 1;
$records = Recordset::all();
$filterFunction = function ($record) use ($firstRecordID) {
return ($record->id == $firstRecordID);
};
$filteredRecords = $records->find($filterFunction);
Ho anche semplificato il tuo lambda in una singola riga.
Altri suggerimenti
Forse è una domanda stupida, ma perché stai facendo filtrare tutto manualmente in seguito quando l'ODM può farlo direttamente?
$records = Recordset::all(array(
'conditions' => array(
'id' => array('<>' => $firstRecordID)
)
));
Anche se il risultato non è molto più piccolo rispetto a all()
, sembra molto più pulito se si utilizza lo strumento giusto per lo scopo giusto.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow