我将静态值传递给我的以下查询,然后它运行良好。如果我动态地改变它,那么它就不会。
//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变量动态传递给它?
答案 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"])