2014-10-01 2 views
0

MongoDB GridFS를 사용하여 사용자 아바타를 저장하고 있습니다. 나는 Laravel 4.2를 사용하고있다.MongoDB GridFS 파일 ID 받기

사용하지 않는 아바타의 DB를 정리하는 함수를 작성 중입니다. 아이디가 어떤 사용자 (사용자 모델)와도 연결되어 있지 않으면 아바타는 사용되지 않습니다.. 아바타의 ID가 주어지면 DB에서 파일을 제거 할 수 있습니다. 그러나 아바타의 ID를 추출하는 데 문제가있어 User 모델의 ID와 비교할 수 있습니다.

데이터는 다음과 같습니다

$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을 잡아 것인가? 뭐든지 내가 ID를 제공하지 않습니다 지금까지 시도했지만 오류가 발생했습니다 : 문자열

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

답변

1

나는이 시도를하고 잘 작동 :

여기
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)); 
} 
+0

[한 줄 답변] (http://meta.stackoverflow.com/questions/266954/one-line-answers)이 허용되는 경우 답변이 검토 대기열 (* q.v. *)로 라우팅되는 경우가 많습니다. 또한 때로는 지역 사회에 잘 받아 들여지지 않습니다. 간단한 설명을 제공하는 것이 일반적으로 좋은 생각입니다. – jww

+0

당신은 절대적으로 옳습니다. 그러나 매우 구체적 인 질문들이 있는데, 그들은 '단선 응답'을 요구한다; 그러한 질문에 대한 한 줄을 더 많이 제공하면 생산성이 떨어집니다. 이 대답이 왜 효과가 있었는지에 대한 설명이 있다면 나는 그것을 포함시킬 것입니다. 사실 다른 사람들을 도울 수 있기 때문에 실제로 알아 내겠습니다.하지만 해결책이있어서 계속할 수 있습니다. 내 프로젝트 작업. – PeterKA

0

캐스트를 : (string)$avatars[0]['_id'];

+0

답장을 보내 주셔서 대단히 감사합니다. @chianh. 나는 그것이 효과가있을 것이라고 믿습니다. – PeterKA

관련 문제