PHPackages                             lain/laravel-operator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. lain/laravel-operator

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

lain/laravel-operator
=====================

v0.0.2(3y ago)08MITPHPPHP ^8.0

Since Dec 8Pushed 3y ago1 watchersCompare

[ Source](https://github.com/xuliangTang/laravel-operator)[ Packagist](https://packagist.org/packages/lain/laravel-operator)[ RSS](/packages/lain-laravel-operator/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (2)Dependencies (3)Versions (3)Used By (0)

Laravel Operator
================

[](#laravel-operator)

[![tests](https://github.com/xuliangTang/laravel-test-generator/workflows/tests/badge.svg?branch=main)](https://github.com/xuliangTang/laravel-operator/actions?query=workflow:tests+branch:master)[![PHP Version Require](https://camo.githubusercontent.com/6902f558ecdbe19d649ba23b58dfeb5062027cd0c676ac0633ca06e0d337f176/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6c61696e2f6c61726176656c2d6f70657261746f72)](https://packagist.org/packages/lain/laravel-operator)[![Latest Stable Version](https://camo.githubusercontent.com/93082dac2bca78317f45e9de1d2b2c310c7125905659808836836a12a13f1753/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f78756c69616e6754616e672f6c61726176656c2d6f70657261746f72)](https://packagist.org/packages/lain/laravel-operator)

Laravel 扩展工具包/库的封装

安装
--

[](#安装)

```
$ composer require lain/laravel-operator

```

功能
--

[](#功能)

### Preload JSON

[](#preload-json)

可以预加载 db 中字段为 json 类型的关联关系。

假设现在有2张表，songs 的 artist\_ids 和 compose\_ids 字段都关联 artists 表

```
CREATE TABLE `songs` (
  `id` integer,
  `name` varchar(50),
  `artist_ids` json
  `compose_ids` json
)

CREATE TABLE `artists` (
  `id` integer,
  `name` varchar(50),
  `avatar` varchar(200)
)

```

这时候查询 song 列表时如果需要关联所有的 artist 数据，应该怎么做？

首先预加载 collection 的所有 artist 数据，并把对应的数据写入给每个结果的 `storedArtists` 属性中

```
$songs = Song::query()->get();

$preloaded = new PreloadJson($songs);
$preloaded->setJsonFields('artist_ids', 'compose_ids')
	->preload(Artist::query(), 'storedArtists', 'name', 'avatar');

return response()->success(SongResource::collection($songs));
```

在 resource 中调用 `fetchValue` 方法获取数据

```
public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'artists' => PreloadJson::fetchValue($this->storedArtists, $this->artist_ids),
        'composes' => PreloadJson::fetchValue($this->storedArtists, $this->compose_ids)
    ];
}
```

### SQL Debug

[](#sql-debug)

可以轻松的获取完整的 sql 语句

#### 获取单条 sql

[](#获取单条-sql)

```
$sql = User::query()->where('id', '>', 500)
            ->where(function ($query) {
                $query->whereIn('mode', [1,2,4,5])
                    ->orWhere('status', 1);
            })
            ->limit(10)->sql();

```

#### 监听所有执行的 sql

[](#监听所有执行的-sql)

```
DB::connection()->enableQueryLog();
User::query()->where('id', '>', 500)
            ->where(function ($query) {
                $query->whereIn('mode', [1,2,4,5])
                    ->orWhere('status', 1);
            })
            ->limit(10)->get();

```

期间所有的 sql 语句会被输出到日志中

```
$ tail -f ./storage/logs/laravel.log

```

```
[2022-12-09 18:44:34] local.INFO: [sql] select * from "oauth_clients" where "id" = 1 limit 1
[2022-12-09 18:44:34] local.INFO: [sql] select "roles".*, "model_has_roles"."model_id" as "pivot_model_id", "model_has_roles"."role_id" as "pivot_role_id", "model_has_roles"."model_type" as "pivot_model_type" from "roles" inner join "model_has_roles" on "roles"."id" = "model_has_roles"."role_id" where "model_has_roles"."model_id" in (2) and "model_has_roles"."model_type" = 'App\Models\OrganizationMember'
[2022-12-09 18:44:34] local.INFO: [sql] select * from "users" where "id" > 500 and ("mode" in (1, 2, 4, 5) or "status" = 1) limit 10

```

###  Health Score

20

—

LowBetter than 14% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

1254d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/168ff6c6f83c59ae761f992784f7a5aecebe55c94709d7633572f2953760f707?d=identicon)[lain](/maintainers/lain)

---

Top Contributors

[![xuliangTang](https://avatars.githubusercontent.com/u/33924057?v=4)](https://github.com/xuliangTang "xuliangTang (7 commits)")

---

Tags

laravelhelper

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/lain-laravel-operator/health.svg)

```
[![Health](https://phpackages.com/badges/lain-laravel-operator/health.svg)](https://phpackages.com/packages/lain-laravel-operator)
```

###  Alternatives

[barryvdh/laravel-ide-helper

Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.

14.9k123.0M687](/packages/barryvdh-laravel-ide-helper)[glhd/special

1929.4k](/packages/glhd-special)[bjuppa/laravel-blog

Add blog functionality to your Laravel project

483.3k2](/packages/bjuppa-laravel-blog)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
