Я использую 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};
Я попробовал это, и это прекрасно работает:
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 ) );
}
Приведите его к строке: (string)$avatars[0]['_id'];