MongoDB GridFS Получить идентификатор файла

Я использую MongoDB GridFS для хранения пользовательских аватаров. Я использую Laravel 4.2.

Я пишу функцию для очистки БД от любых неиспользованных аватаров; аватар не используется, если его идентификатор не связан ни с одним пользователем (модель пользователя). Учитывая идентификатор аватара, я могу удалить файл из БД. Однако у меня возникают проблемы с извлечением идентификаторов аватара, поэтому я могу сравнить их с User модель.

Данные выглядят так:

    $avatars = DB::collection('user_avatars.files')->get();
return Response::json( $avatars[0] );

//result:
{"_id":{"$id":"542797096a8d09ac318b456b"},"extension":"jpg","usage":0,"popularity":[],"filename":"image.jpg","uploadDate":{"sec":1411880713,"usec":671000},"length":248388,"chunkSize":262144,"md5":"2c724361015c7e438d30359dd9c724a0"}

Теперь, если я напишу:

    return Response::json( $avatars[0]['_id'] );

//result is:
{"$id":"542797096a8d09ac318b456b"}

Как бы я схватил 542797096a8d09ac318b456b? Все, что я пробовал до сих пор, не дает идентификатор, но выдает ошибку:

$avatars[0]['_id']->$id;
$avatars[0]['_id']['$id'];
$avatars[0]['_id']->$$id;
$avatars[0]['_id']->{$id};

0

Решение

Я попробовал это, и это прекрасно работает:

 avatars[0]['_id']->{'$id'};

Вот полная функция:

public function doPurgeDB()
{
$removed = array();
$avatars = DB::collection('user_avatars.files')->get();
foreach( $avatars as $avatar )
{
$avatar_id = $avatar['_id']->{'$id'}; //<<<<=========
$user = User::where('avatar_id', '=', $avatar_id);
if( !$user->count() )
{
$removed[] = $avatar;
$this->removeAvatar( $avatar_id );
}
}
return Response::json( $removed );
}

public function removeAvatar( $id )
{
$grid = DB::getGridFS('user_avatars');
return $grid->delete( new MongoId( $id ) );
}
1

Другие решения

Приведите его к строке: (string)$avatars[0]['_id'];

0

По вопросам рекламы [email protected]