thinkphp 5 闭包函数使用详解
举个例子:
~~~
$this->where(function ($query)
{
$query->where('id', 1)->whereor('id', 2);
})->find();
~~~
上述栗子就是一个简单的where查询的闭包函数使用,使用匿名函数添加复杂条件查询,
最后执行的sql是:
~~~
// 加入上述代码写在user模型里,则执行的sql为:
select * from user where (id = 1 or id = 2);
~~~
其实闭包函数也不会复杂到哪去,无非带参数不带参数而已。
上面的例子加强一下:
~~~
$this->where(function ($query) use ($id1, $id2)
{
$query->where('id', $id1)->whereor('id', $id2);
})->find();
~~~
这也就是thinkphp 5 里怎么使用闭包查询传参数的方法,使用use 传入参数。
在thinkphp5模型的查询中,一般有两种方式:数组方式和闭包方式,相对于数组方式只能定义查询条件,闭包方式可以支持更多的连贯操作,包括排序、数量限制等。
那么我们在使用闭包方式要怎么传入参数呢?具体代码如下:
普通闭包查询:
~~~
$items = ItemModel::all(function($query){$query->order('sort', 'asc');});
~~~
带参数的闭包查询:
~~~
$items = ItemModel::all(function($query)use($type){
$query->where('type',$type)->order('sort', 'asc');
}
);
~~~
通过代码我们可以发现,在ThinkPHP5闭包查询中传参使用的是use传递。