Does Laravel where
метод сбора изменить коллекцию?Метод Laravel 'where' изменяет коллекцию
На Laravel documentation вы можете прочитать:
почти каждый метод возвращает новый экземпляр коллекции, что позволяет сохранить первоначальную копию коллекции
И единственными методами, которые имеют предупреждение об изменении коллекции являются 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
объекта
Aaaahhh теперь я понимаю, я использую Eloquent, где метод, а не коллекция. Черт, я этого не видел. –
@ MariaVilaró Нет проблем. Те методы, которые вы видите, не такие, как для Eloquent –