45 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| function php_crud_api_transform(tables) {
 | |
| 	var array_flip = function (trans) {
 | |
| 		var key, tmp_ar = {};
 | |
| 		for (key in trans) {
 | |
| 			tmp_ar[trans[key]] = key;
 | |
| 		}
 | |
| 		return tmp_ar;
 | |
| 	};
 | |
| 	var get_objects = function (tables,table_name,where_index,match_value) {
 | |
| 		var objects = [];
 | |
| 		for (var record in tables[table_name]['records']) {
 | |
| 			record = tables[table_name]['records'][record];
 | |
| 			if (!where_index || record[where_index]==match_value) {
 | |
| 				var object = {};
 | |
| 				for (var index in tables[table_name]['columns']) {
 | |
| 					var column = tables[table_name]['columns'][index];
 | |
| 					object[column] = record[index];
 | |
| 					for (var relation in tables) {
 | |
| 						var reltable = tables[relation];
 | |
| 						for (var key in reltable['relations']) {
 | |
| 							var target = reltable['relations'][key];
 | |
| 							if (target == table_name+'.'+column) {
 | |
| 								column_indices = array_flip(reltable['columns']);
 | |
| 								object[relation] = get_objects(tables,relation,column_indices[key],record[index]);
 | |
| 							}
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 				objects.push(object);
 | |
| 			}
 | |
| 		}
 | |
| 		return objects;
 | |
| 	};
 | |
| 	tree = {};
 | |
| 	for (var name in tables) {
 | |
| 		var table = tables[name];
 | |
| 		if (!table['relations']) {
 | |
| 			tree[name] = get_objects(tables,name);
 | |
| 			if (table['results']) {
 | |
| 				tree['_results'] = table['results'];
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	return tree;
 | |
| }
 | 
