【发布时间】:2020-02-16 02:35:13
【问题描述】:
我正在尝试使用集合 reject() 函数迭代包含嵌套集合的集合,并返回包含更新的嵌套数据的原始集合。
所以这是我的测验集合
{
"id": 1,
"title": "quiz 1",
"questions": [
{
"id": 1,
"quiz_id": 1,
"question": "q1 - q1",
"answers": [
{
"id": 1,
"question_id": 1,
"answer": "answer to question 1"
},
{
"id": 2,
"question_id": 1,
"answer": "answer to question 1"
}
]
},
{
"id": 2,
"quiz_id": 1,
"question": "q1 - q2",
"answers": [
{
"id": 3,
"question_id": 2,
"answer": "answer to question 1"
}
]
}
]
}
现在我想遍历问题并拒绝那些已经回答并存在于结果集合中的问题。我通过使用reject() 函数来做到这一点
$quizResults = [
{
"id": 1,
"user_id": 1,
"quiz_id": 1,
"question_id": 1,
"answer_id": 1,
"correct": 1,
"created_at": null,
"updated_at": null
}
];
$filtered = $quiz->questions->reject(function ($value, $key) use ($quizResult) {
return $quizResult->contains('question_id', $value->id);
});
我想返回带有更新问题的测验集合(不包括被拒绝的问题),但我似乎无法找出完成此任务的正确方法。 (如果我只返回 $filtered 变量,我会得到正确的过滤结果,但是如果我尝试将其放回 $quiz var,它将不会应用被拒绝的过滤器)。如果我只是这样做
return $quiz
我将获得与所有问题相同的原始集合,就好像我从未运行过 reject() 函数一样。
如何制作$quiz->questions = $filtered;?
【问题讨论】:
-
你能给我们一个
$quizResult的例子吗?喜欢你的$quiz -
@AndySong 我将其添加到编辑中,谢谢。
标签: laravel laravel-collection