0

Laravelwhere集合方法是否修改集合?

Laravel 文档中,您可以阅读以下内容:

几乎每个方法都返回一个新的 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()) {
        ...

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

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

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

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

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

4

1 回答 1

1

第一件事是要收集你需要使用get,所以如果你想收集,你应该这样做:

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

不仅:

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

第二件事是不可能在集合上使用运算符 usingwhere方法,所以:

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

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

于 2016-04-18T14:49:34.010 回答