Laravel5.1 框架模型查询作用域定义与用法实例分析

一、Laravel 5.1框架模型查询作用域定义

模型作用域可以用于定义通用查询的约束条件,避免在控制器或其他地方重复编写查询代码。当需要按照一些常见的查询条件(例如用户状态为激活状态)过滤或限制查询时,可以使用模型作用域来定义这些查询条件。

定义模型作用域非常简单,只需要在模型类里定义一个名为scope*的公共函数即可。例如,如果要定义一个名为active的查询作用域,可以在模型类里定义一个名为scopeActive的函数。

```

public function scopeActive($query)

{

return $query->where('status', 1);

}

```

上述代码定义了一个名为active的查询作用域,以限制查询结果只包含status字段值为1(即激活状态)的记录。

二、模型作用域使用示例

我们来看一个完整的模型作用域的使用示例:

1. 创建一个测试模型类

创建一个新的测试模型,新建文件TestModel.php,内容如下:

```

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class TestModel extends Model

{

protected $table = 'test_table'; // 表名

protected $primaryKey = 'id'; // 主键名

public $timestamps = false; // 是否维护created_at和updated_at字段

// 定义查询作用域active

public function scopeActive($query)

{

return $query->where('status', 1);

}

// 定义查询作用域type

public function scopeType($query, $val)

{

return $query->where('type', $val);

}

}

```

这里我们定义了两个查询作用域,分别是active和type。

2. 在控制器中使用模型作用域进行查询

在控制器中调用模型的active查询作用域,代码如下:

```

namespace App\Http\Controllers;

use App\Models\TestModel;

class TestController extends Controller

{

public function index()

{

// 调用模型的active查询作用域

$list = TestModel::active()->get();

return view('index', [

'list' => $list,

]);

}

}

```

这里我们调用TestModel模型的active查询作用域来查询status字段值为1的记录。

3. 在控制器中使用多个模型作用域进行查询

在控制器中调用模型的多个查询作用域,代码如下:

```

namespace App\Http\Controllers;

use App\Models\TestModel;

class TestController extends Controller

{

public function index()

{

// 调用模型的active和type查询作用域

$list = TestModel::active()->type('A')->get();

return view('index', [

'list' => $list,

]);

}

}

```

这里我们调用TestModel模型的active和type查询作用域,查询status字段值为1且type字段值为A的记录。

三、总结

通过模型作用域定义与使用示例,我们可以看出模型作用域的用途是定义通用的查询条件,使代码更加简洁和易于维护。在实际使用中,我们可以根据需求编写不同的查询作用域,以满足复杂的查询需求。

后端开发标签