首页 > 数据库 > mysql教程 > Bangla 部分查询范围中的 Laravel Eloquent ORM)

Bangla 部分查询范围中的 Laravel Eloquent ORM)

Mary-Kate Olsen
发布: 2025-01-16 20:03:11
原创
866 人浏览过

Laravel Eloquent ORM in Bangla Part-Query Scopes)

Laravel Eloquent 的 查询范围 功能允许将递归查询存储在方法中以使代码可重用。这使代码保持良好且易于理解,尤其是在一次又一次需要相同类型的查询时。 查询范围将常见查询定义为方法,然后可以在整个模型中使用它们。

1。全局范围

说明:

全局范围 始终附加到模型。 当您使用模型时,此范围会自动工作,您不必每次都编写它。 通常用于检查登录状态、活跃记录等

创建全局范围:

1. 创建全局范围类:

要在 Laravel 中创建 全局范围,需要使用一个实现 Scope 接口的类。

<code class="language-php">use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('active', 1);  // সক্রিয়  ফিল্টার
    }
}</code>
登录后复制
登录后复制
登录后复制

2. 将全局范围附加到模型:

这应该添加到模型的 booted() 方法中。

<code class="language-php">use App\Models\Post;
use App\Scopes\ActiveScope;

class Post extends Model
{
    protected static function booted()
    {
        static::addGlobalScope(new ActiveScope);
    }
}</code>
登录后复制
登录后复制
登录后复制

现在使用 Post::all() 将自动应用 active = 1 过滤器。

3. 暂时省略全局范围:

<code class="language-php">use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('active', 1);  // সক্রিয়  ফিল্টার
    }
}</code>
登录后复制
登录后复制
登录后复制

这将暂时删除全局范围并返回除 active 过滤器之外的所有帖子。

2。本地范围

说明:

本地范围 充当模型内的特定查询范围,仅在您显式调用它时才适用。 它不会像全局范围那样在每个查询期间自动应用。

创建本地范围:

通过向模型添加公共方法来创建本地作用域,其第一个参数 Builder 是输入。

<code class="language-php">use App\Models\Post;
use App\Scopes\ActiveScope;

class Post extends Model
{
    protected static function booted()
    {
        static::addGlobalScope(new ActiveScope);
    }
}</code>
登录后复制
登录后复制
登录后复制

使用本地范围:

<code class="language-php">$posts = Post::withoutGlobalScope(ActiveScope::class)->get();</code>
登录后复制

将参数添加到本地范围:

参数可以传递到本地作用域。

<code class="language-php">use App\Models\Post;

class Post extends Model
{
    // লোকাল  স্কোপ
    public function scopeActive($query)
    {
        return $query->where('active', 1);
    }

    public function scopeDraft($query)
    {
        return $query->where('status', 'draft');
    }
}</code>
登录后复制

范围现在可以与 status 参数一起使用:

<code class="language-php">// সক্রিয়  পোস্ট  পেতে:
$posts = Post::active()->get();

// ড্রাফট  পোস্ট  পেতে:
$draftPosts = Post::draft()->get();

// চেইন  করে  ব্যবহার:
$activeDraftPosts = Post::active()->draft()->get();</code>
登录后复制

'published' 是参数。

3。动态范围

动态作用域是一种本地作用域,可以动态调用作用域名称。 Laravel 允许使用 scopeName() 类型名称。

<code class="language-php">class Post extends Model
{
    // লোকাল  স্কোপ
    public function scopeStatus($query, $status)
    {
        return $query->where('status', $status);
    }
}</code>
登录后复制

范围现在可以动态调用:

<code class="language-php">$posts = Post::status('published')->get();</code>
登录后复制

这就像 scopePublished() 方法一样。

4。多个范围

可以链接多个作用域。 例如,statusactive 范围可以一起使用:

<code class="language-php">use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('active', 1);  // সক্রিয়  ফিল্টার
    }
}</code>
登录后复制
登录后复制
登录后复制

这将同时适用于activestatus('published')

5。可链接范围

Eloquent 的 本地作用域 是可链接的,这意味着可以同时使用多个作用域。

<code class="language-php">use App\Models\Post;
use App\Scopes\ActiveScope;

class Post extends Model
{
    protected static function booted()
    {
        static::addGlobalScope(new ActiveScope);
    }
}</code>
登录后复制
登录后复制
登录后复制

共有 3 个作用域和一个 orderBy 链式作用域。

以上是Bangla 部分查询范围中的 Laravel Eloquent ORM)的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板