如何从集合中删除模型实例

时间:2018-07-24 01:47:01

标签: php laravel laravel-5

我有一个文章集,就像这样(为了清楚起见,查询被简化了):

$articles = Article::all();

我有一篇文章:

$a = Article::find($id);

如何从$ articles中删除$ a?请注意,$ a应该始终存在于$ articles中。

我尝试过:

$filtered_articles = $articles->map(function ($current, $key) use ($a)
{
  if ($current->id != $a->id) {
    return $current;
  }
});

但是,这会返回一个在$ a以前为'null'的Collection,例如:

Collection {#220
  #items: array:8 [
  0 => Article {#243}
  1 => null
  2 => Article {#245}
  3 => Article {#246}
  4 => Article {#247}
  5 => Article {#248}
  6 => Article {#249}
  7 => Article {#250}
]}

这当然破坏了我网站其他部分的功能。我想获取该确切的集合,但没有空条目。
解决这个问题最无痛的方法是什么?

2 个答案:

答案 0 :(得分:0)

我将通过使用filter()方法而不是map()来解决这个问题。这样,您将只返回符合true / false条件的当前项目,而不返回空值

$filtered_articles = $articles->filter(function ($current, $key) use ($a)
{
   return ($current->id != $a->id);
});

答案 1 :(得分:-1)

尝试这种简单的方法,在查询级别获取所有需要的文章。

获取除id以外的所有文章:

$articles = Article::where('id', '!=', $id)->get();
$a = Article::find($id);