【问题标题】:Removing rows from a collection changing types of the collection从更改集合类型的集合中删除行
【发布时间】:2020-03-20 07:31:36
【问题描述】:

我有两个系列。第一个是一个大集合。另一种是删除列表。例如:

$data= List::where('status', true)->get();

$list= List::where('begin_at', '<', Carbon::now())->pluck('id');

$result = $data->whereNotIn('id', $list);

这只是一个简单的例子。我有一个动态数据。我的问题是:

当我返回$data 时,它返回[{}, {}, ...] 格式

但是当我返回$result时,它返回{}, {}, ...

我尝试了$result-&gt;toArray()$result-&gt;toCollapse(),但它们都不起作用。

为什么在get()之后,使用where条件改变集合的类型?为什么数组符号不见了?解决方案的最佳实践是什么?提前致谢。

【问题讨论】:

  • 不是您正在寻找的答案,但您实际上可以单独修改第一个查询获得相同的结果。 $data= List::where('status', true)-&gt;where('begin_at', '&gt;', Carbon::now())-&gt;get();
  • @user3532758 是的。它将在单个查询中工作。亲爱的 Ali Ozen,你为什么让它变得复杂?!有什么具体原因吗?
  • 很抱歉,@KarthikSWOT 回复晚了。我只是举一些例子。我现在无法更改工作代码。我只是大项目的一小部分。只需在返回的查询中添加额外的 eloquent 查询即可。

标签: php arrays laravel collections eloquent


【解决方案1】:

在集合上使用 all() 以将其作为一个数组,并保持 Eloquent 模型完好无损。如果你改用toArray(),它会将所有内容都转换为一个普通的PHP数组。

$data-&gt;whereNotIn('id', $list)-&gt;all();

See docs here

在模型上调用get() 将创建一个集合,而创建后的集合将在其自身上调用all()。因此,在修改集合后,您需要自己调用 all() 到与 get() 相同的“格式”。

【讨论】:

  • 仍然不知道为什么这不起作用。但事实并非如此。在这种情况下,我通常会添加 ->all() 来获取数组。可能我遗漏了一些东西并且没有写下这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
相关资源
最近更新 更多