【发布时间】:2015-11-02 19:56:28
【问题描述】:
我正在尝试通过匹配某些值来删除我的 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() 吗?或者有没有办法将集合重新链接到关系?
【问题讨论】: