wcy00q 2016-12-01 15:49:46 2866次浏览 2条回复 0 0 0

场景: orders订单表存储用户表user的id, user表的包含用户信息,昵称等 AR已经配置好关系

需求:查询订单时,可以通过用户昵称来进行查询订单信息 1.png

但是发现无法传递需要搜索的用户昵称变量,因为匿名函数无法访问外部函数的变量,作用域导致的。 假如匿名函数可以再传递一个参数,用于将外部变量传递入匿名函数,就完美了

假设可以这样

$query = Orders::find();
        $query->joinWith([
            'user user' => function (\yii\db\ActiveQuery $query,array $userParams){
                $query->where(['like','user.name',$userParams['keyword']);
            }
        ],true,'INNER JOIN');

有同学就会说了,可以定义一个全局变量。是的,完全可以,但是能传递变量不是更好麽。

目前的做法是,使用Yii::$app->params来进行变量的传递 2.png

您需要登录后才可以回复。登录 | 立即注册