在cakephp3中匹配或innerJoinWith中传递动态变量

时间:2018-03-29 12:54:14

标签: cakephp-3.0 cakephp-3.x

我将静态值传递给我的以下查询,然后它运行良好。如果我动态地改变它,那么它就不会。

 //works well
        $users = $this->Users->find('all')
                     ->where(['Users.role' => $role])
                     ->innerJoinWith('UserDetail',function($query){
                     return $query->where(['UserDetail.state' => "chandigarh"]); 
                   })->toArray();

       // don't work
         $state="chandigarh";
         $users = $this->Users->find('all')
                     ->where(['Users.role' => $role])
                     ->innerJoinWith('UserDetail',function($query){
                     return $query->where(['UserDetail.state' => "$state"]); 
                   })->toArray();

如何将$ state变量动态传递给它?

2 个答案:

答案 0 :(得分:2)

这就是PHP的工作方式,它并不是与CakePHP相关的问题

该变量在匿名函数$ query的范围内不可用 请参阅示例3:http://php.net/manual/en/functions.anonymous.php

您应该使用USE contruct继承父作用域中的变量,如下所示:

$state="chandigarh";
$users = $this->Users->find('all')
            ->where(['Users.role' => $role])
            ->innerJoinWith('UserDetail',function($query) use ($state) {
                  return $query->where(['UserDetail.state' => $state]); 
            })->toArray();

答案 1 :(得分:0)

你应该删除“"$state"应该包含的”$query->where(['UserDetail.state' => $state])而不是$query->where(['UserDetail.state' => "$state"])