From 834aedd5d814d61dc9d5e16a69ab2101f8424287 Mon Sep 17 00:00:00 2001 From: Maurits van der Schee Date: Tue, 17 Feb 2015 01:53:24 +0100 Subject: [PATCH] PHP client for relations --- blog.sql | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ client.php | 51 ++++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 blog.sql create mode 100644 client.php diff --git a/blog.sql b/blog.sql new file mode 100644 index 0000000..c6119b3 --- /dev/null +++ b/blog.sql @@ -0,0 +1,93 @@ +-- Adminer 4.1.0 MySQL dump + +SET NAMES utf8; +SET time_zone = '+00:00'; +SET foreign_key_checks = 0; +SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; + +DROP TABLE IF EXISTS `categories`; +CREATE TABLE `categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +INSERT INTO `categories` (`id`, `name`) VALUES +(1, 'anouncement'), +(2, 'article'); + +DROP TABLE IF EXISTS `comments`; +CREATE TABLE `comments` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `post_id` int(11) NOT NULL, + `message` varchar(255) COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id`), + KEY `post_id` (`post_id`), + CONSTRAINT `comments_ibfk_1` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +INSERT INTO `comments` (`id`, `post_id`, `message`) VALUES +(1, 1, 'great'), +(2, 1, 'fantastic'), +(3, 2, 'thank you'), +(4, 2, 'awesome'); + +DROP TABLE IF EXISTS `posts`; +CREATE TABLE `posts` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user_id` int(11) NOT NULL, + `category_id` int(11) NOT NULL, + `content` varchar(255) COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id`), + KEY `category_id` (`category_id`), + KEY `user_id` (`user_id`), + CONSTRAINT `posts_ibfk_3` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`), + CONSTRAINT `posts_ibfk_4` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +INSERT INTO `posts` (`id`, `user_id`, `category_id`, `content`) VALUES +(1, 1, 1, 'blog started'), +(2, 1, 2, 'It works!'); + +DROP TABLE IF EXISTS `post_tags`; +CREATE TABLE `post_tags` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `post_id` int(11) NOT NULL, + `tag_id` int(11) NOT NULL, + PRIMARY KEY (`id`), + KEY `post_id` (`post_id`), + KEY `tag_id` (`tag_id`), + CONSTRAINT `post_tags_ibfk_1` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`), + CONSTRAINT `post_tags_ibfk_2` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +INSERT INTO `post_tags` (`id`, `post_id`, `tag_id`) VALUES +(1, 1, 1), +(2, 1, 2), +(3, 2, 1), +(4, 2, 2); + +DROP TABLE IF EXISTS `tags`; +CREATE TABLE `tags` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +INSERT INTO `tags` (`id`, `name`) VALUES +(1, 'funny'), +(2, 'important'); + +DROP TABLE IF EXISTS `users`; +CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(255) COLLATE utf8_bin NOT NULL, + `password` varchar(255) COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +INSERT INTO `users` (`id`, `username`, `password`) VALUES +(1, 'user1', 'pass1'), +(2, 'user2', 'pass2'); + +-- 2015-02-14 17:55:38 diff --git a/client.php b/client.php new file mode 100644 index 0000000..4568412 --- /dev/null +++ b/client.php @@ -0,0 +1,51 @@ +$column) { + $object[$column] = $record[$index]; + foreach ($tables as $relation=>$reltable) { + foreach ($reltable['relations'] as $key=>$target) { + if ($target == "$table_name.$column") { + $column_indices = array_flip($reltable['columns']); + $object[$relation] = get_objects($tables,$relation,$column_indices[$key],$record[$index]); + } + } + } + } + $objects[] = $object; + } + } + return $objects; +} + +function get_tree(&$tables) { + $tree = array(); + foreach ($tables as $name=>$table) { + if (!isset($table['relations'])) { + $tree[$name] = get_objects($tables,$name); + } + } + return $tree; +} + +header('Content-Type: text/plain'); +print_r(get_tree(call('GET','http://localhost/api.php/posts,categories,tags,comments?filter=id:1')));