使用api方式增量同步数据表
龙飞 cb36284ed3 更新 README.md пре 10 месеци
src bug пре 10 месеци
.gitignore init пре 10 месеци
README.md 更新 README.md пре 10 месеци
composer.json init пре 10 месеци
version.php init пре 10 месеци

README.md

使用方式

步骤一:

composer require e282486518/laravel-table-sync

步骤二: 继承服务

<?php

namespace App\Services;

use App\Models\Meeting;
use e282486518\LaravelTableSync\SyncService;

/**
 * 增量同步数据到c_meeting表
 */
class MeetingSyncService extends SyncService
{
    // A服务器API地址
    protected string $apiUrl = 'https://api.xxx.com/api/meeting/sync';

    // API令牌
    protected string $apiToken = 'xxxxxx';

    /**
     * 更新数据
     * @param $id
     * @return void
     */
    protected function afterUpdate($id): void {
        Meeting::getOne($id, true);
    }

}

步骤三: 在命令行中调用

    public function handle() {
        $serv = new MeetingSyncService(new Meeting());
        if ($serv->sync()) {
            echo "更新成功...\n";
        } else {
            echo "更新出错...\n";
        }
        return Command::SUCCESS;
    }

服务端代码

<?php

namespace App\Http\Controllers;

use App\Models\Meeting;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;

class MeetingController extends Controller
{

    /**
     * 增量更新数据
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function sync(Request $request)
    {
        // 最后更新时间
        try {
            $request->validate([
                'time' => 'required|date_format:Y-m-d H:i:s',
                'year' => 'date_format:Y',
                'catid' => 'integer',
            ]);
        } catch (ValidationException $e) {
            // 自定义返回内容
            return response()->json([
                'err' => 1,
                'msg' => $e->errors(),
                'data' => []
            ], 200);
        }
        $time = $request->input('time');
        $year = $request->input('year', 0);
        $catid = $request->input('catid', 0);
        // 获取更新的数据
        $model = Meeting::query()->where('updated_at', '>', $time);
        if (!empty($year)) {
            $model->where('year', $year);
        }
        if (!empty($catid)) {
            $model->where('cat_id', $catid);
        }
        $meetings = $model->orderBy('updated_at', 'desc')->get();
        // 最后更新时间
        if (!$meetings->isEmpty()) {
            $latestUpdate = $meetings->first()->updated_at->format('Y-m-d H:i:s');
        } else {
            $latestUpdate = $time;
        }
        // 返回
        return response()->json([
            'err' => 0,
            'msg' => 'success',
            'data' => $meetings,
            'latest_update' => $latestUpdate
        ])->setEncodingOptions(320);
    }
}