Поки чекав відповіді, розв'язав проблему самотужки
Просто додав ще один масив $composition_list, у який вношу значення із циклу foreach із перевіркою на наявність ідентичного значення у масиві — якщо запис вже існує, то вдруге він у масив не додається.
foreach ($files as $file) {
$compositions = $file->compositions;
$composition_list = array();
foreach ($compositions as $composition) {
if(!in_array($composition, $composition_list)) {
$composition_list[] = $composition;
}
}
}
UPD. Наразі доданий масив не приносить користі. Всередині циклу він кожного разу перезаписується, а якщо винести його назовні, то дані все одно дублюються. Тож я ще в пошуках та в надії на допомогу...
UPD2. Створив ще один цикл, в одному перевіряю наявність дубльованих id, в інший записую готовий результат (оскільки з одним масивом php попереджував мене, що я намагаюся об'єкт перетворити на рядок).
$files = $category->files;
$composition_ids = array();
$composition_list = array();
foreach ($files as $file) {
$compositions = $file->compositions;
foreach ($compositions as $composition) {
if(!in_array($composition->id, $composition_ids)) {
$composition_ids[] = $composition->id;
$composition_list[] = $composition;
}
}
}
Готовий масив для використання у blade - composition_list.
Тепер ніби все працює, але щось мені здається, що прикол зі створенням двох додаткових масивів — великі незручні граблі, які можна замінити елегантнішим варіантом. Наразі залишаю, як є, але сподіваюся, що тут хтось щось та й підкаже з часом.