为什么我的雄辩查询在以后使用时会被覆盖?

我遇到了一个很奇怪的问题,我找不到它的原因。我想知道是否有人遇到过同样的问题,或者是配置问题。


基本上这是我的代码块。很简单的东西。


$productImages = App\ProductImage::where('product_id', $product->id)->orderBy("order", "asc");

$productImages_First = $productImages->first();

$productImages_All = $productImages->get();

如果我执行转储并死掉,$productImages_All那么它会输出以下内容:


Collection {

  #items: array:5

}

这几个月来一直很好。我根本没有接触过这块代码。


但是,我在上周注意到,如果我$productImages_All现在转储并死掉,它只会返回第一个图像而不是所有图像。


Collection {

  #items: array:1

}

似乎$productImages_First = $productImages->first();正在覆盖它。这是标准行为吗?如果它是对原始雄辩查询的调用,那将是完全有意义的,我应该创建一个单独的查询来获取所有图像。然而,没有意义的是,这段代码已经运行了几个月没有改变,并且随机损坏了。


我可以很快解决这个问题,我只是想看看我是否可以更清楚地了解可能导致这种情况的原因?


凤凰求蛊
浏览 182回答 1
1回答

红颜莎娜

这是因为当您调用第一个方法时,它会修改Eloquent/Builder 中的Query/Builder对象并将 limit 属性设置为 1,因此您必须在调用 get 方法之前重置它的值。$productImages = App\ProductImage::where('product_id', $product->id)- >orderBy("order", "asc");$productImages_First = (clone $productImages)->first();$productImages_All = $productImages->get();或者你可以$productImages = App\ProductImage::where('product_id', $product->id)- >orderBy("order", "asc");$productImages_First = $productImages->first();$productImages->getQuery()->limit=null;$productImages_All = $productImages->get();
打开App,查看更多内容
随时随地看视频慕课网APP