如何为模型中的所有选择查询定义默认 where 条件?

Posted

技术标签:

【中文标题】如何为模型中的所有选择查询定义默认 where 条件?【英文标题】:How can I define default where condition for all select queries in my models? 【发布时间】:2019-05-25 06:38:18 【问题描述】:

我需要在我的模型中设置默认 where 条件。

所以实际上我必须在我的所有选择查询中设置它。

查询如下:

->where('status','active')

【问题讨论】:

【参考方案1】:

您可以使用全局范围: https://laravel.com/docs/5.7/eloquent#global-scopes

将其写入您要使用条件查询的模型中

/**
 * The "booting" method of the model.
 *
 * @return void
 */
protected static function boot()

    parent::boot();

    static::addGlobalScope('status', function (Builder $builder) 
        $builder->where('status', 'active');
    );

【讨论】:

【参考方案2】:

你可以在模型中使用 laravel 作用域(局部作用域或全局作用域):

全局范围示例:

在 Model.php 中:

 protected static function boot()
    
        parent::boot();    
        static::addGlobalScope('status', function (Builder $builder) 
            $builder->where('status', 'active');
        );
    

本地范围示例:

在 Model.php 中

public function scopeIsActive($query)
    
        return $query->where('status', 'active');
    

在控制器中:

Model::isActive()->get();

source

【讨论】:

【参考方案3】:

你应该试试这个:

你的模特:

class News extends Eloquent 
   public function scopeStatus($query)
    
     return $query->where('status', '=', 1);
    
 

你的控制器:

$news  = News::status()->get();

【讨论】:

以上是关于如何为模型中的所有选择查询定义默认 where 条件?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 where 子句中的列编写具有不连续值的 Cassandra 查询

如何为 MongoDB 集合中的所有文档选择单个字段?

Rails:如何为 Rails activerecord 模型中的属性创建默认值? [复制]

如何为 Django 模型定义默认数据?

hive - 如何为每个匹配选择前 N 个元素

如何为mysql中的每条记录检索表中的两条记录