2

doctrine2 を使用する symfony アプリがあり、次の配列があります。

Array ( 
[0] => Array ( [id] => 7 [createdOn] => DateTime Object ( [date] => 2011-03-01))                                        
[1] => Array ( [id] => 9 [createdOn] => DateTime Object ( [date] => 2011-03-12))
)

amd 次のように、[id] 値を月ごとにグループ化してデータベースに入力する必要があります。

| createdOn | id    |
| 2011-03   | {7, 9}|

どうすればこれを達成できますか?

4

4 に答える 4

1

必要な形式で配列を作成するには;

foreach($array as $index => $subArray){
  $yearMonth = subStr($subArray["date"], 0, 7);
  $newData[$yearMonth][] = $subArray["id"];
}

foreach($newData as $yearMonth => $subArray){
  $newData[$yearMonth] = "{".implode(",", $newData[$yearMonth])."}";
}

var_dump($newData);
于 2013-03-08T08:36:16.917 に答える
0

これを試して :

$res           = array();
foreach($your_array as $val){
    $dt        = new DateTime($val['createdOn']->date); 
    $res[$dt->format('Y-m')][] = $val['id'];
}

foreach($res as &$val){
   $val        = json_encode($val);
}

echo "<pre>";
print_r($res);
于 2013-03-08T08:33:56.487 に答える
0

http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.htmlの説明に従って doctrine イベントリスナーを作成し 、ID を別のデータベースに追加します。

于 2013-03-08T08:34:23.490 に答える
0

ドクトリン クエリ ビルダーの一部:

$date = explode('-', $array[0]['date']);
$fromDate = new \DateTime($date[0].'-'.$date[1].'-'01 00:00:00); // 2011-03-01 00:00:00
$toDate = $fromDate;
$toDate->modify('+1 month'); // 2011-04-01 00:00:00

$qb = $this->createQueryBuilder('a')
     ->select('a.id')
     ->where('a.createdOn >= :fromDate')
     ->andWhere('a.createdOn < :toDate') // strictly inferior
     ->setParameter('fromDate', $fromDate->format('Y-m-d H:i:s'))
     ->setParameter('toDate', $toDate->format('Y-m-d H:i:s'));

このクエリでは、createdOn の日付が "2011-03-01 00:00:00" (含む) と "2011-04-01 00:00:00" (除外) の間のエンティティの ID を検索するため、createdOn 3月 !

于 2013-03-08T08:30:29.123 に答える