andyharis/yii2apigql

Yii2 API gql

安装: 37

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 1

分支: 1

开放问题: 0

类型:yii2-extension

0.2.5 2018-06-26 09:47 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:30:49 UTC


README

yii2-apigql 提供了进行 CRUD 操作与数据库交互的方法

用法

API 文档

例如,我们有 3 个表/模型:Users,Messages,Post。

  • Users -> hasMany Post
  • Post -> hasMany Messages

我们想访问包含帖子的所有消息的客户

{
  "username": "",
  "avatarUrl": "",
  "post": {
    "postName":"",
    "messages": {
      "textMessage": "",
      "dateAdded": ""
    }
  }
}

发起请求并获取您提供格式的所有数据。

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",
          }
        ]
      },
    ]
  }
  • 通过一个查询访问主模型和嵌套关系数据。
  • 按嵌套关系排序
    • /clients?select={...}&sort=post.postName - 按升序排序 post.postName ASC
    • /clients?select={...}&sort=!post.messages.dateAdded - 按降序排序 post.messages.dateAdded DESC
  • 使用嵌套条件过滤数据
    • /clients?select={"username":"=Andyhar"} - 其中 username 等于 Andyhar
    • /clients?select={"post":{"messages":{"textMessage":"~Rocks"}}} - 其中 post.messages.textMessage like Rocks
    • /clients?select={"post":{"likes":">35"}} - 其中 post.likes > 35

安装

安装此扩展的首选方式是通过 composer。运行以下命令之一:

composer require andyharis/yii2apigql

入门指南

安装后,您应在配置文件中启用此模块扩展

  1. 打开您的 frontend/config/main.php
  2. 将模块 gql 添加到 bootstrap 部分
// main.php
return [
  'id' => 'app-frontend',
  'basePath' => dirname(__DIR__),
  'bootstrap' => ['log', 'gql'],
   // your code
];

然后您需要初始化组件本身。只需将新的组件 gql 添加到您的组件列表中即可。

// main.php
'components' => [
   'gql' => [
     'class' => "andyharis\yii2apigql\Bootstrap",
     'relations' => require 'models.php'
    ],
    // your code
]

创建文件 models.php

如您所见,我们 require 'models.php' 以让组件知道应使用哪些模型。

因此,您可能想为这种情况创建一个单独的文件来存储您的模型。

// 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;

在哪里

  • clients - 表示模型的名称
  • \frontend\models\Clients::className() - 表示用于获取和更新数据的模型

几乎完成了

另一件重要的事情是使用 Yii2ApigqlRecord 组件扩展所有模型。

// 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

就这样。现在您可以使用 yii2apigql 进行操作。

有关更多信息,请访问 Wiki 以获取 API 文档。