2016-10-19 2 views
0

HBCI를 통해 은행 거래를 계속 가져오고 싶습니다. 문제는 고유 키가 없거나 정확한 시간 소인 (시간 소인은 항상 오전 12시에만 해결됨)입니다. 은행 거래를위한 고유 키 생성

나는 누군가가 같은 목적으로 텍스트와 같은 날에 같은 값을 전달하는 경우 (잘못된 반응으로 이어질 수있는 모든 분야에 걸쳐 해시를 생성하는 API

enter image description here

에서 얻을 데이터이며, 등등)

중복 가져 오기를 방지하고 고유 키를 생성하려면 어떻게해야합니까?

+0

명백한 해결책은 자동 증가 키입니다. 하지만 hbci를 통해 가져온 데이터 필드를 사용하여 고유 한 키를 작성하고 같은 로컬 및 원격 계정간에 같은 날짜에 동일한 값을 가진 여러 트랜잭션의 경우 중복을 생성한다는 사실을 알고 있습니다. 확인해주세요. –

+0

자동 증가를 추가 할 수 있지만 아직 어떤 트랜잭션을 전송했는지 식별해야합니다. – Alex

+1

여기에서 같은 문제가 발생했습니다. 나는 단순히 같은 날의 진술을 계산하려고 생각하고있다. 결국 : 두 문장이 완전히 같으면 두 번 저장하지 않는 한 먼저 저장하는 문장이 중요하지 않습니다. – Juergen

답변

0
/** 
* Generate a unique ID per transaction 
* We assume, that all transactions of a day are always present in the fetched transactions 
* (after a while, very old transactions might not appear) 
* So we generate a continues key per day, combine it with the date and have a globally unique key 
* 
* @return Transaction[] 
*/ 
public static function getKeyedTransactions() 
{ 
    $transactions = self::getTransactions(); 
    $result = []; 
    $dateCounters = array(); 
    foreach($transactions as $transaction) { 
     $date = $transaction->getDate()->format('Ymd'); 
     if (!isset($dateCounters[$date])) { 
      $dateCounters[$date] = 0; 
     } 
     $dateCounters[$date]++; 
     $uniqId = $date . sprintf('%05d', $dateCounters[$date]); 
     $result[$uniqId] = $transaction; 
    } 
    return $result; 
} 
+1

나는 생각한다 : $ date = $ transaction-> getBookingDate() -> format ('Ymd'); 더 나은 일을합니다. – Juergen