How to pass variables into a filter on a recordset or collection
문제
So I have a variable and a recordset:
$firstRecordID = 1;
$records = Recordset::all();
I want to filter the recordset:
$filteredRecords = $records->find(function($record){
if($record->id == $firstRecordID)
return true;
else
return false;
});
Unfortunately, the closure has no clue what $firstRecordID is.
How do I pass in the ID?
해결책
You can bind the $firstRecordID to the closure:
$firstRecordID = 1;
$records = Recordset::all();
$filterFunction = function ($record) use ($firstRecordID) {
return ($record->id == $firstRecordID);
};
$filteredRecords = $records->find($filterFunction);
I also simplified your lambda into a single line.
다른 팁
It is maybe a stupid question, but why are you getting everything to filter afterwards manually when the ODM can do that directly?
$records = Recordset::all(array(
'conditions' => array(
'id' => array('<>' => $firstRecordID)
)
));
Even if the result isn't much smaller that doing all()
it looks much cleaner using the right tool for the right purpose.
제휴하지 않습니다 StackOverflow