Reputation:
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?
Upvotes: 2
Views: 348
Reputation: 4373
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.
Upvotes: 1
Reputation: 2634
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.
Upvotes: 4