Como passar variáveis para um filtro em um conjunto de registros ou coleção
Pergunta
Portanto, tenho uma variável e um conjunto de registros:
$firstRecordID = 1;
$records = Recordset::all();
Quero filtrar o conjunto de registros:
$filteredRecords = $records->find(function($record){
if($record->id == $firstRecordID)
return true;
else
return false;
});
Infelizmente, o fechamento não faz ideia do que é $ firstRecordID.
Como faço para passar o ID?
Solução
Você pode vincular o $ firstRecordID ao encerramento:
$firstRecordID = 1;
$records = Recordset::all();
$filterFunction = function ($record) use ($firstRecordID) {
return ($record->id == $firstRecordID);
};
$filteredRecords = $records->find($filterFunction);
Também simplifiquei seu lambda em uma única linha.
Outras dicas
Talvez seja uma pergunta estúpida, mas por que você está conseguindo filtrar tudo manualmente depois, quando o ODM pode fazer isso diretamente?
$records = Recordset::all(array(
'conditions' => array(
'id' => array('<>' => $firstRecordID)
)
));
Mesmo que o resultado não seja muito menor do que all()
, parece muito mais claro usando a ferramenta certa para a finalidade certa.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow