Не совсем понятно, что вы хотите сделать в итоге. Если вы добавляете какие-то данные в массив, то вы должны его сначала получить, а при добавлении проверять, нет ли в нем уже таких же данных, которые вам прилетают в $request. Обычно это делается по id или slug, но у вас ни того, ни другого нет, поэтому для примера соберем все заголовки $titles из полученного массива:
$descriptionJson = json_decode(file_get_contents($path), true);
$titles = array();
foreach ( $descriptionJson as $key => $descriptionJsonValue ) {
$titles[] = $descriptionJsonValue['title'];
}
Теперь, видимо, вы делаете какой-то запрос и получаете ответ в виде объекта. Назову его $requests. Вам нужно получить кол-во элементов, чтобы добавлять новые с id+1 и проверять наличие заголовка в уже существующих данных:
$count = count($requests); // получаем кол-во объектов для ключа
foreach ( $requests as $key => $request ) {
if ( array_search($request->title, $titles) == false ) {
$count++;
$descriptionJson[$count]['title'] = $request->title;
$descriptionJson[$count]['thumbnail'] = ImageGenerator::imageDescriptions($request->file('photo'));
$descriptionJson[$count]['descriptions'] = $request->description;
}
}
$product->descriptions = json_encode($descriptionJson);
$product->save();