从laravel集合中返回特定项目并将其删除

时间:2014-04-16 08:52:48

标签: php laravel closures

我试图映射一组查询结果。具体来说,我想检查该集合的项目是否适合我的闭包,返回该项目并从该集合中删除它。此外,我需要使用闭包函数传递参数。

$data = Model::where('something', 'stuff')->get();
$res = array();
foreach ($x as $y) {
  $res = $data->each("closure function described above with $y");
  // do stuff with $res
} 

我希望这很清楚 谢谢您的帮助 欢呼声。

3 个答案:

答案 0 :(得分:3)

您可以尝试以下内容,假设您在$variables$y=general中有一些数据作为type,因此请检查type是否为general然后对类型为general的模型执行某些操作,然后将该模型放入$res数组中,然后将其从集合中删除:

$variables = '...';
$res = array();
$y = 'general'; // for example, $y contains general
$data = Model::where('something', 'stuff')->get();
foreach ($variables as $variable) {
    foreach ($data as $key => $model) {
        if($model->type == $y) {
            // Do something with $model
            $res[] = $model;
            unset($data[$key]);
        }
    }
}

您也可以查看this article,与Collection对象互动可能会有所帮助。

答案 1 :(得分:0)

要在闭包中使用变量,您必须使用关键字'使用' )。

function($item) use ($y) {
    // remove item from collection by key 
    //using collection.forget($key) 
} 

答案 2 :(得分:0)

使用laravel 5,您可以使用where方法进行收集。

$data = Model::where('something', 'stuff')->get();

$removedItem = $data->where('key', 'value');

或者如果你使用Larave 4,你可以在集合上调用filter方法

$removedItem = $data->filter(function($item) use ($removedValue) {
    return $item->key == $removedValue;
});

$data = $data->diff($removedItem);