public function actionInject() { header('Content-type:application/json'); $post = Yii::app()->getRequest()->getPost('chart'); $weeks = $post['weeks']; $artists = array(); $tracks = array(); $chart_entries = array(); // traverse $week /* weeks : [ * { * week : 1, * year : 2008, * tracks : [{ * start : 0, * mark : 1, * position : 32, * track : "Sexual Eruption", * artist : "Snoop Dogg" * }] * } * ] */ foreach ($weeks as $week) { foreach ($week['tracks'] as $chart_entry) { // populate artists $artist_name = $chart_entry['artist']; $artist_hash = md5($artist_name); if (!isset($artists[$artist_hash])) { $artists[$artist_hash] = $artist_name; } // populate tracks $track_title = $chart_entry['track']; $track_hash = md5("{$track_title}\\%charty\\%{$artist_name}"); if (!isset($tracks[$track_hash])) { $tracks[$track_hash] = array('title' => $track_title, 'artist_hash' => $artist_hash); } // populate chart_entry_data $chart_entries[] = array('year' => $week['year'], 'week' => $week['week'], 'position' => $chart_entry['position'], 'track_hash' => $track_hash); } } $inserted_artists = Artist::insertMultiple($artists); $inserted_tracks = Track::insertMultiple($tracks); $inserted_chart_entries = ChartEntry::insertMultiple($chart_entries); echo json_encode(array('inserted_artists' => $inserted_artists, 'inserted_tracks' => $inserted_tracks, 'inserted_chart_entries' => $inserted_chart_entries)); }