Вот тестовый класс, который я использую для отладки этой проблемы, которая возникла в течение последних нескольких дней.< /p>
Код: Выделить всё
namespace App\DataTransferObjects;
use Illuminate\Support\Collection;
class TestDTOCollection extends Collection
{
public function __construct($items)
{
$DTOs = [];
foreach($items as $item) {
array_push($DTOs, new TestDTO(
id: $item['id'],
));
}
parent::__construct($DTOs);
}
}
Код: Выделить всё
$collection = TestDTOCollection::make($items);
dd($collection);
Код: Выделить всё
App\DataTransferObjects\TestDTOCollection^ {#942
#items: array:2 [
0 => App\DataTransferObjects\TestDTO^ {#962
+id: "0123456789"
#exceptKeys: []
#onlyKeys: []
}
1 => App\DataTransferObjects\TestDTO^ {#986
+id: "000000000"
#exceptKeys: []
#onlyKeys: []
}
]
}
Код: Выделить всё
TestDTOCollection::make($items)
->filter(fn ($item) => $item->id === $someId));
Код: Выделить всё
Cannot use object of type App\DataTransferObjects\TestDTO as array
at app/DataTransferObjects/TestDTOCollection.php:15
11▕ $DTOs = [];
12▕
13▕ foreach($items as $item) {
14▕ array_push($DTOs, new TestDTO(
➜ 15▕ id: $item['id'],
16▕ ));
17▕ }
18▕
19▕ parent::__construct($DTOs);
Для справки, вот класс TestDTO:
Код: Выделить всё
namespace App\DataTransferObjects;
use Spatie\DataTransferObject\DataTransferObject;
class TestDTO extends DataTransferObject
{
public string $id;
}
Небольшое обновление
Похоже, когда я не использую собственный класс коллекции, он просто работает как и ожидалось. Например:
Код: Выделить всё
collect($items)
->transform(fn ($item) => new TestDTO(
id: $item['id'],
))
->filter(fn ($item) => isset($item->id));
Подробнее здесь: https://stackoverflow.com/questions/682 ... rray-in-la
Мобильная версия