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

时间:2018-12-27 07:48:36

标签: mysql laravel model eloquent default

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

实际上,我必须在所有选择查询中进行设置。

查询方式:

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

3 个答案:

答案 0 :(得分:3)

您应该尝试以下操作:

您的型号:

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

您的控制器:

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

答案 1 :(得分:3)

您可以在模型中使用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

答案 2 :(得分: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');
    });
}