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()) {
...
并且在第一个地方之后修改了集合,因此$descriptionsWithAnotherUnit
始终为空,因为在该点上集合仅具有unit_id == $request->unit
的记录。这是框架或文档中的错误吗?
此处出现的问题:如果不从数据库中再次检索,我该怎么做才能保留原始对象的副本?我试过这个:
$descriptions = Description::where('description', $request->description);
if ($descriptions->count()) {
$descriptionsWithSameUnit = $descriptions;
$descriptionsWithSameUnit->where('unit_id', $request->unit);
...
但是,当我将$descriptions
方法应用于where
对象时,$descriptionsWithSameUnit
对象也会被修改
答案 0 :(得分:1)
首先要获得收藏,你需要使用get
,所以如果你想获得收藏,你应该这样做:
$descriptions = Description::where('description', $request->description)->get();
而不仅仅是:
$descriptions = Description::where('description', $request->description);
第二件事是,在收集时不可能使用where
method运算符,所以:
$descriptionsWithAnotherUnit = $descriptions->where('unit_id', '!=', $request->unit);
完全不正确。你应该在这里使用filter
方法。