PHP client for relations
This commit is contained in:
parent
4af768dc24
commit
834aedd5d8
2 changed files with 144 additions and 0 deletions
93
blog.sql
Normal file
93
blog.sql
Normal file
|
|
@ -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
|
||||
51
client.php
Normal file
51
client.php
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
|
||||
function call($method, $url, $data = false) {
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
if ($data) {
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
||||
$headers = array();
|
||||
$headers[] = 'Content-Type: application/json';
|
||||
$headers[] = 'Content-Length: ' . strlen($data);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
}
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
return json_decode(curl_exec($ch),true);
|
||||
}
|
||||
|
||||
function get_objects(&$tables,$table_name,$where_index=false,$match_value=false) {
|
||||
$objects = array();
|
||||
foreach ($tables[$table_name]['records'] as $record) {
|
||||
if ($where_index===false || $record[$where_index]==$match_value) {
|
||||
$object = array();
|
||||
foreach ($tables[$table_name]['columns'] as $index=>$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')));
|
||||
Loading…
Add table
Add a link
Reference in a new issue