protonemedia/laravel-eloquent-where-not

此包已被废弃,不再维护。没有建议的替代包。

Laravel 包用于反转 Eloquent 范围。

1.2.0 2022-02-04 09:46 UTC

This package is auto-updated.

Last update: 2023-01-09 13:59:01 UTC


README

Latest Version on Packagist run-tests Quality Score Total Downloads Buy us a tree

包含在 Laravel 9.2.0 中!

截至 Laravel 9.2.0,您可以使用本地的 whereNot 方法。此包将为 Laravel 8 用户维护一段时间,但最终将弃用。

📺 想要看这个包的实际应用?加入 12 月 10 日 13:30 CET 的直播:https://youtu.be/fAY75SLQj3w

支持此包!

❤️ 我们自豪地通过开发 Laravel 包并免费提供它们来支持社区。如果此包为您节省了时间,或者您在专业上依赖它,请考虑资助维护和开发。跟踪问题和拉取请求需要时间,但我们乐于提供帮助!

Laravel Splade

你听说过 Laravel Splade 吗?🤩

它是 Inertia.js 的 魔法 与 Blade 的 简单性 的结合。Splade 提供了一种超级简单的方式来使用 Blade 模板构建单页应用程序。除了那种神奇的 SPA 感觉外,它还带有十多个组件来使您的应用程序闪亮并使其交互式,而无需离开 Blade。

要求

  • PHP 7.4+
  • Laravel 8.0 或 9.0

此包使用 MySQL 5.7、PostgreSQL 10.8 和 SQLite 通过 GitHub Actions 进行测试。

功能

  • 翻转/反转范围,或任何查询约束。
  • 无第三方依赖。

相关包:Laravel Eloquent Scope as Select

博客文章

如果您想了解更多关于此包背景的信息,请阅读博客文章: 使用 Laravel 包将 Eloquent 范围的相反数应用于查询构建器

安装

您可以通过 composer 安装此包

composer require protonemedia/laravel-eloquent-where-not

添加到查询构建器中,例如在您的 AppServiceProvider 中。默认情况下,宏的名称是 whereNot,但您可以使用 addMacro 方法的第一个参数来自定义它。

use ProtoneMedia\LaravelEloquentWhereNot\WhereNot;

public function boot()
{
    WhereNot::addMacro();

    // or use a custom method name:
    WhereNot::addMacro('not');
}

简短 API 描述

为了更实用的解释,请查看下面的 使用 部分。

使用闭包调用 whereNot 方法

Post::whereNot(function ($query) {
    $query->onFrontPage();
})->get();

上面的示例可以通过使用字符串来缩短,这个字符串应该是作用域的名称

Post::whereNot('onFrontPage')->get();

您可以使用数组调用多个作用域

Post::whereNot(['popular', 'published'])->get();

使用关联数组调用动态作用域

Post::whereNot(['ofType' => 'announcement'])->get();

如果您的动态作用域需要多个参数,您可以使用关联数组

Post::whereNot(['publishedBetween' => [2010, 2020]])->get();

您也可以混合动态和非动态作用域

Post::whereNot([
    'published',
    'ofType' => 'announcement'
])->get();

使用

假设您有一个 Post Eloquent 模型,它有一个查询作用域,该作用域将查询约束为所有应该出现在主页上的帖子。

class Post extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function comments()
    {
        return $this->hasMany(Comment::class);
    }

    public function scopeOnFrontPage($query)
    {
        $query->where('is_public', 1)
            ->where('votes', '>', 100)
            ->has('comments', '>=', 20)
            ->whereHas('user', fn($user) => $user->isAdmin())
            ->whereYear('published_at', date('Y'));
    }
}

现在,您可以通过在查询上调用作用域方法来获取您主页上的所有帖子

$posts = Post::onFrontPage()->get();

但您如果想获取 所有 没有出现在主页上的帖子呢?利用此包的力量,您可以重用您的作用域!

$posts = Post::whereNot(function($query) {
    $query->onFrontPage();
})->get();

使用短闭包,这是 PHP 7.4 中引入的功能,这可以更短

$posts = Post::whereNot(fn ($query) => $query->onFrontPage())->get();

快捷键

除了使用闭包之外,还有一些快捷键可以使用(也请参阅:简短 API 描述

使用字符串而不是闭包

Post::whereNot(function ($query) {
    $query->published();
});

// is the same as:

Post::whereNot('published');

使用数组代替闭包,以支持多个作用域和动态作用域

Post::whereNot(function ($query) {
    $query->ofType('announcement');
});

// is the same as:

Post::whereNot(['ofType' => 'announcement']);

测试

composer test

变更日志

请查看 CHANGELOG 获取有关最近更改的更多信息。

贡献

请查看 CONTRIBUTING 获取详细信息。

其他 Laravel 包

  • Laravel Analytics Event Tracking:一个用于轻松将事件发送到 Google Analytics 的 Laravel 包。
  • Laravel Blade On Demand:一个用于在内存中编译 Blade 模板的 Laravel 包。
  • Laravel Cross Eloquent Search:一个用于在多个 Eloquent 模型中搜索的 Laravel 包。
  • Laravel Eloquent Scope as Select:停止在 PHP 中重复您的 Eloquent 查询作用域和约束。此包允许您通过将它们作为子查询添加来重用您的查询作用域和约束。
  • Laravel FFMpeg:此包为 Laravel 提供了 FFmpeg 的集成。文件的存储由 Laravel 的文件系统处理。
  • Laravel Form Components:使用Tailwind CSS自定义表单和Bootstrap 4快速构建表单的Blade组件。支持验证、模型绑定、默认值、多语言支持,包含默认供应商样式和完全可自定义!
  • Laravel Paddle:支持webhooks/events的Paddle.com API集成。
  • Laravel Verify New Email:此包增加了验证新电子邮件地址的支持:当用户更新其电子邮件地址时,新地址在验证之前不会替换旧地址。
  • Laravel WebDAV:Laravel的Filesystem的WebDAV驱动。

安全

如果您发现任何与安全相关的问题,请通过电子邮件pascal@protone.media与我们联系,而不是使用问题跟踪器。

致谢

许可

MIT许可证(MIT)。请参阅许可文件以获取更多信息。

实物捐赠

此包是Treeware。如果您在生产环境中使用它,我们要求您为世界买一棵树以感谢我们的工作。通过为Treeware森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。