2013-12-22 33 views
3

如果我嘗試做忘記不起作用

$examples->forget(20); 

從這個集合

$examples = Example::where('example', '=', $data['example'])->get(); 

刪除的項目不會從集合中刪除的項目,我還是拿回所有原來在那裏的物品。我已閱讀Laravel文檔和api文檔。它應該工作(我認爲),但它沒有。

有人能指出我在這裏做錯了嗎?

這仍然返回一個對象。

$examples->forget(49); 
return $examples->find(49); 

P.S.其他方法像推或獲得作品。

非常感謝!

回答

5

你犯了一個小錯誤,其實你沒注意到。我做了我自己:)。使用array key從集合中刪除對象項目。

Array(0 => 'abc' 
1 => 'bcd' 
49 => 'aaa' 
) 

$examples->forget(49); 
        ^^ array key 49 

凡爲,find使用id從一個集合

table: examples 

id example 
1 abc 
49 bce 

$examples->find(49); 
       ^^ `example id` 
+0

謝謝你的確是這個問題。有沒有什麼方法可以輕鬆地通過對象的id「忘記」? – Vincent

+0

您可以使用過濾器。 – Anam

0

我只是想對添加到亞南的答案找對象。一旦你有一個集合,你可以再通過其循環像這樣通過ID

function forgetById($collection,$id){ 
    foreach($collection as $key => $item){ 
     if($item->id == $id){ 
      $collection->forget($key); 
      break; 
     } 
    } 
    return $collection; 
} 

$examples = Example::where('example', '=', $data['example'])->get(); 

$examples = forgetById($examples,20); 
0

刪除據它說,forget()作品關鍵的文檔。單詞「密鑰」是不明確的,因爲它們意味着要說的是數組密鑰,也被稱爲「索引」,而不是模型密鑰,它是id。

然而,在其他方法,如find()或他們用的是「」是指模型的關鍵,所以你可以看到的混亂。

從源代碼可以看到forget()方法可以在Illuminate\Support\Collection類中找到,而不是在Illuminate\Database\Eloquent\Collection中找到。

我的理論是,支持類應該是更通用的,所以它不考慮模型的關鍵,但我真的不知道。