jsadways/operationrecord

此包最新版本(0.7)没有可用的许可信息。

0.7 2024-08-16 07:39 UTC

This package is auto-updated.

Last update: 2024-09-16 07:49:23 UTC


README

步骤1:使用 docker-compose 设置 MongoDB 服务器

version: "3.3"

services:
  mongo:
    container_name: mongo
    image: mongo:7.0.12
    restart: unless-stopped
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=123456
    ports:
      - 27017:27017
    volumes:
      - mongo-data:/data/db
    networks:
      - dev
networks:
  dev:
volumes:
  mongo-data:

步骤2:安装包

composer require jsadways/operationrecord

步骤3:编辑 config/database.php

'connections' => [
    ...
    'mongodb' => [
        'driver' => 'mongodb',
        'dsn' => env('MONGO_DB_URI'),
        'database' => env('MONGO_DB_DATABASE', 'forge'),
    ]
    ...
]

步骤4:在 .env 文件中添加元素

MONGO_DB_URI=mongodb://admin:123456@SERVER_LOCATION
MONGO_DB_DATABASE=YOUR_DB_NAME

支持函数和参数

  1. set(SetDto) : 将数据设置到 MongoDB 集合
  2. get(array $filter) : 从 MongoDB 集合获取一个文档
  3. list(ListDto) : 从 MongoDB 集合获取文档列表
  • SetDto : 对象包含 $data_id,$creator_id,$action_name,$data(*可选)
  • ListDto : 对象包含 $filter,$sort_by,$sort_order,$per_page,$show_diff
  • array filter : 检查 filter 使用情况,请参阅 JsAdways/scopeFilter

用法

创建一个模型

  • 此模式描述了如何将记录存储到 MongoDB
  • 例如
#app/Models/ExampleRecord.php

<?php

namespace App\Models;

use Jsadways\Operationrecord\Models\RecodeModel;

class ExampleRecord extends RecodeModel
{
    protected $table = 'example_record';
}

在控制器中使用服务

use Jsadways\Operationrecord\Services\OperationRecordService;
use Jsadways\Operationrecord\Services\ListDto;
use Jsadways\Operationrecord\Services\SetDto;
use App\Models\ExampleRecord; // the custom model class to accrss MongoDB

使用示例

设置一条记录

$record = new OperationRecordService(ExampleRecord::class);
$array_data = [
    'id' => 1,
    'name' => 'alvin'
];
$data = new SetDto(
    data_id: 133,
    creator_id: 155,
    action_name: 'package_test',
    data: json_encode($array_data)
);
$result = $record->set($data);

获取一条记录

$record = new OperationRecordService(ExampleRecord::class);
$filter = [
    'creator_id_eq' => 155,//to get record where creator_id = 155
];
$result = $record->get($filter);

获取记录列表

$record = new OperationRecordService(ExampleRecord::class);
$filter = new ListDto(
    filter: ['creator_id_eq'=>2],
    per_page:0, //per_page set 0 do not create pagination object
    show_fidd:true
);
$result = $record->list($filter);