过滤Laravel集合而不返回副本

时间:2015-11-02 19:56:29

标签: php laravel

我正在尝试通过匹配某些值来删除laravel关系集合中的项目。问题与答案有一对多的关系。

在您提出要求之前,这些删除需要在内存中完成并稍后存储到数据库中(因此我们可以通过验证来完成一些操作。)

所以,我正在使用关系对象给我的Collection:

$this->answers->filter(function($answer) use ($answer_ids_to_remove){
  return !in_array($answer['id'], $answer_ids_to_remove);
});

但是Collection :: filter返回一个副本,并不会修改现有的集合。所以我尝试了这个:

$this->answers = $this->answers->filter(function($answer) use ($answer_ids_to_remove){
  return !in_array($answer['id'], $answer_ids_to_remove);
});

但是我认为这个赋值会删除集合和关系本身之间的链接,因为我在保存模型时开始收到No Such Column错误:

General error: 1 no such column: answers (SQL: update "questions" set "answers" = {"1":{"id":"72","question_id":"117","text":"Answer 2","order":"1"},"2":{"id":"73","question_id":"117","text":"Answer 3","order":"2"},"3":{"text":"Answer 4","question_id":117,"order":3}}, "updated_at" = 2015-11-02 19:18:31 where "id" = 117)

它试图将其转换为JSON这一事实表明它不再能够识别由于分配而产生的一对多关系。

我可以在原始集合上运行filter()吗?或者有没有办法将集合重新链接到关系?

1 个答案:

答案 0 :(得分:0)

尝试在集合中使用 $fr = fopen("users.txt",'r+'); $content = ""; while(!feof($fr)) { $user = fgets($fr); if($user == "user_20") { $user = "disabled ".$user; } $content.= $user; $content.= "\r\n"; } file_put_contents("users.txt", $content); fclose($fr); 方法,如下所示:

intersect

而不是构建一个答案ID数组来删除使用集合本身。

http://laravel.com/docs/5.1/collections#method-intersect