andyharis / yii2apigql
Yii2 API gql
Installs: 37
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 1
Open Issues: 0
Type:yii2-extension
Requires
- yiisoft/yii2: ^2
README
yii2-apigql provides methods to work with database on CRUD operations
Usage
For example we have 3 table/models: Users, Messages, Post.
Users
-> hasManyPost
Post
-> hasManyMessages
We want to access clients with all messages including post:
{ "username": "", "avatarUrl": "", "post": { "postName":"", "messages": { "textMessage": "", "dateAdded": "" } } }
Make request and get all data with the same format you provided.
GET /clients?select={"username": "","avatarUrl": "","post": {"postName": "","messages": {"textMessage": "","dateAdded": ""}}}
// response { "username": "Andyhar", "avatarUrl": "http://example.com/andyhar.png", "post": [ { "postName": "Post about API", "dateAdded": "1500276204", "messages": [ { "textMessage": "Hey what a nice post!", "dateAdded": "1500276704", }, { "textMessage": "Make more posts like this!", "dateAdded": "1500279841", } ] }, ] }
- Access main model and nested relations data with one query.
- Sort by nested relations:
/clients?select={...}&sort=post.postName
- sort bypost.postName ASC
/clients?select={...}&sort=!post.messages.dateAdded
- sort bypost.messaged.dateAdded DESC
- Filter data with nested conditions:
/clients?select={"username":"=Andyhar"}
- whereusername equals Andyhar
/clients?select={"post":{"messages":{"textMessage":"~Rocks"}}}
- wherepost.messages.textMessage like Rocks
/clients?select={"post":{"likes":">35"}}
- wherepost.likes > 35
Installation
The preferred way to install this extension is through composer. Either run
composer require andyharis/yii2apigql
Getting started
After installation you should enable this module extension in your config file:
- Open your
frontend/config/main.php
- Add module
gql
tobootstrap
section
// main.php return [ 'id' => 'app-frontend', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log', 'gql'], // your code ];
Then you need to initialize component itself.
Just add new component gql
to list of your components:
// main.php 'components' => [ 'gql' => [ 'class' => "andyharis\yii2apigql\Bootstrap", 'relations' => require 'models.php' ], // your code ]
Creating file models.php
As you can see we require 'models.php'
to let component know which models to use.
So you probably want create a separate file to store you models for this case.
// models.php use andyharis\yii2apigql\components\api\Relations; // Initializing component relations class which will handle dependencies $object = new Relations(); // Add all models you need to work with $object ->addModel(String $name, String $className) ... ... ->addModel('clients', \frontend\models\Clients::className()) ->addModel('job', \frontend\models\Job::className()); // we need to return this object with relations return $object;
Where:
clients
- indicates name for your model\frontend\models\Clients::className()
- indicates what model should use to fetch and update data
Almost there
Another important thing is to extend all your models with Yii2ApigqlRecord
component.
// frontend/models/Clients.php namespace frontend\models; use andyharis\yii2apigql\components\Yii2ApigqlRecord; // This is important, because Yii2ApigqlRecord has some methods which use your models to make magic. // Of course you can extend it with your class but don't forget to extend Yii2ApigqlRecord class Clients extends Yii2ApigqlRecord
That's it. Now you can work with yii2apigql
.
For more info please visit Wiki for API documentation.