我正在尝试通过匹配某些值来删除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()吗?或者有没有办法将集合重新链接到关系?
答案 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数组来删除使用集合本身。