【发布时间】:2016-04-18 22:50:32
【问题描述】:
Laravel where收集方法会修改收集吗?
在Laravel documentation,您可以阅读:
几乎每个方法都会返回一个新的 Collection 实例,让您可以保留该集合的原始副本
只有transform和forget有修改集合警告的方法
但我有这个代码:
$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 始终为空,因为此时集合只有 unit_id == $request->unit 的记录。这是框架还是文档中的错误?
从这里产生的问题是:我可以做些什么来保留原始对象的副本而不从数据库中再次检索?我试过这个:
$descriptions = Description::where('description', $request->description);
if ($descriptions->count()) {
$descriptionsWithSameUnit = $descriptions;
$descriptionsWithSameUnit->where('unit_id', $request->unit);
...
但是当我将where 方法应用于$descriptionsWithSameUnit 对象时,$descriptions 对象也被修改了
【问题讨论】:
标签: laravel laravel-5 laravel-5.2 laravel-collection