【问题标题】:Cant use toArray after Filter and Pluck a collection laravel过滤后不能使用 toArray 并采摘收集 laravel
【发布时间】:2020-05-14 23:24:13
【问题描述】:

我需要在刀片视图中显示以逗号分隔的过滤集合中的类别标签列表。

代码如下所示

{{$data->categories->filter(function ($value) {return $value->type_id == 1;})->pluck(['label'])->toArray()}};

这个错误是当我使用toArray()

htmlspecialchars() 期望参数 1 是字符串,给定数组

我需要数组中的结果与 implode 一起使用以显示以逗号分隔的列表

{{implode(', ',$data->categories->filter(function ($value) {return $value->type_id == 1;})->pluck(['label'])->toArray())}};

要显示的预期结果:

Car, Truck, Cheap

集合

[{"id":80,"type_id":1,"label":"Car","pivot":{"data_id":6060,"category_id":80}},
{"id":45,"type_id":1,"label":"Truck","pivot":{"data_id":6060,"category_id":45}},

{"id":75,"type_id":8,"label":"Cheap","pivot":{"data_id":6060,"category_id":75}}]

如果我不使用 filter / where 集合,我可以使用 toArray()

知道为什么使用过滤器/where 集合会导致 toArray() 错误吗?

【问题讨论】:

  • 我认为问题不在于这段代码。您是否在刀片视图中的某处使用此结果?
  • 是的,它在刀片视图中
  • 您是否尝试将数组直接输出到视图中的某个位置?你能把这段代码贴出来吗?
  • 我正在尝试显示 implode(....) 结果,因此列表将用逗号分隔。代码在问题中
  • 您是否尝试过在没有implode 的情况下调试集合的输出?

标签: arrays laravel laravel-5 collections laravel-collection


【解决方案1】:

您可以在pluck 之后使用toArray。实际上,如果要将pluck 的结果视为数组,则需要使用它。例如,如果你这样做:

$data = Model::where({condition})->pluck();

然后尝试将$data 用作数组,例如:

if (in_array($someEntity, $data) {
     //entity is in data
}

它会给你错误,你需要像这样将 pluck 结果转换为数组:

$data = Model::where({condition})->pluck()->toArray();

希望对你有帮助

【讨论】:

  • 问题是 toArray() 给了我错误。因为 implode() 需要导致数组
猜你喜欢
  • 1970-01-01
  • 2015-09-26
  • 2020-02-21
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2020-09-13
相关资源
最近更新 更多