Обновлённый ответ.
1. Можешь все объекты преобразовать в массивы без поля ID. Далее просто использовать
array_unique($collection, SORT_REGULAR);
2. Можешь определить метод
__toString()
у класса
DonateOperation
. Как-нибудь так:
public function __toString(): string
{
$attrs = (array)$this;
unset($attrs['id']);
return json_encode($attrs);
}
Тогда
array_unique
будет работать применительно к исходной коллекции объектов.
3. Брут-форс в лоб. Самый долгий способ. С небольшой оптимизацией:
$collection = [...]; //исходная коллекция объектов
$found = []; //коллекция найденных массивов для быстрой проверки
$unique = []; //результирующая коллекция
foreach ($collection as $item) {
//преобразуем объект в массив без поля "id"
$array = (array)$item;
unset($array['id']);
//ищем полученный массив в массиве $found
if (!in_array($array, $found)) {
$found[] = $array;
$unique[] = $item;
}
}