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
唯一有修改集合警告的方法是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()) {
...
并且集合在第一个 $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
方法。
Laravelwhere
采集方式是否修改采集?
在 Laravel documentation 上,您可以阅读以下内容:
almost every method returns a new Collection instance, allowing you to preserve the original copy of the 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()) {
...
并且集合在第一个 $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
方法。