在使用yii2with、joinwith等关联查询的时候,我发现没有办法将外界的参数进行传递进去,例如:

$province_id=15;
$customers=Parks::find()->where(['id'=>2])
          ->width(['house'=>function($query){
           $query->andWhere(['province_id'=>$province_id]);
          }
          ])->asArray()->all();

这时候就会报错没有定义$province_id这个参数。这样的情况下我们使用use来加载外界参数:例如

$province_id=15;
$customers=Parks::find()->where(['id'=>2])
          ->width(['house'=>function($query) use($province_id){
           $query->andWhere(['province_id'=>$province_id]);
          }
          ])->asArray()->all();

这样就可以加载。
为什么这样用呢
php 5.3新增的闭包语法介绍function() use() {}
闭包: 内部函数使用了外部函数中定义的变量。
在PHP新开放的闭包语法中, 我们就是用use来使用闭包外部定义的变量的。

相关资料
php 5.3新增的闭包语法介绍function() use() {}


yanbingyun1990
236 声望23 粉丝