【问题标题】:Except doesn't work with Laravel Collections除了不适用于 Laravel 集合
【发布时间】:2017-10-02 14:14:13
【问题描述】:
我有以下代码:
$object = Object::with("prototypes.fields")->findOrFail($id)->get();
$object_copied = $object->except(['id', 'prefix', 'prototypes']);
dd($object_copied->all());
最后一行返回包含以下字段的集合:'id', 'prefix', 'prototypes'
【问题讨论】:
标签:
laravel
laravel-5
eloquent
laravel-5.4
laravel-collection
【解决方案1】:
第一件事:
$object = Object::with("prototypes.fields")->findOrFail($id)->get();
这可能是错误的。
您应该使用:
$object = Object::with("prototypes.fields")->findOrFail($id);
或
$object = Object::with("prototypes.fields")->get();
第二件事是你真正想要达到的目标。如果您只想获取某些列,except 方法可能不是您真正想要在这里使用的方法。在这种情况下,更好的选择是在从数据库获取数据时使用select,或者使用map 方法。
假设在$object 中您有使用except 的对象集合,您将只从方法中删除一些对象(那些具有给定键的对象)并且这些集合中的键将是数字 0、1、... x,所以您应该如果您不想在集合中包含第一个模型,则仅在此处传递数字键。
【解决方案2】:
试试$object_copied = collect($object )->except('id', 'prefix', 'prototypes');