Laravel 'where' collection 方法修改集合

Laravel 'where' collection method modifies the collection

Laravelwhere采集方式是否修改采集?

Laravel documentation 上,您可以阅读以下内容:

almost every method returns a new Collection instance, allowing you to preserve the original copy of the collection

唯一有修改集合警告的方法是transformforget

但是我有这个代码:

    $descriptions = Description::where('description', $request->description);

    if ($descriptions->count()) {
        $descriptionsWithSameUnit = $descriptions->where('unit_id', $request->unit);
        if ($descriptionsWithSameUnit->count()==0) {
            $descriptionsWithAnotherUnit = $descriptions->where('unit_id', '!=', $request->unit);
            if ($descriptionsWithAnotherUnit->count()) {
        ...

并且集合在第一个 $descriptionsWithAnotherUnit 之后被修改,所以 $descriptionsWithAnotherUnit 总是空的,因为在那一点上集合只有 unit_id == $request->unit 的记录。这是框架或文档中的错误吗?

由此产生的问题:我可以做些什么来保留原始对象的副本而不从数据库中再次检索?我试过这个:

$descriptions = Description::where('description', $request->description);

if ($descriptions->count()) {
    $descriptionsWithSameUnit = $descriptions;
    $descriptionsWithSameUnit->where('unit_id', $request->unit);
    ...

但是当我将where方法应用于$descriptionsWithSameUnit对象时$descriptions对象也被修改了

首先要得到collection需要用到get,所以如果你想得到collection,你应该这样做:

$descriptions = Description::where('description', $request->description)->get();

不仅如此:

$descriptions = Description::where('description', $request->description);

其次,不可能在 collection 上使用 where method 运算符,因此:

$descriptionsWithAnotherUnit = $descriptions->where('unit_id', '!=', $request->unit);

完全不正确。你应该在这里使用filter方法。