在 cakephp3 中 matching 或 innerJoinWith 传递动态变量
Pass dynamic variable in matching or innerJoinWith in cakephp3
我正在将静态值传递给我的以下查询,然后它运行良好。如果我将其更改为动态,则不会。
//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 变量动态传递给它?
这就是 PHP 的工作原理,它并不是真正与 CakePHP 相关的问题
该变量在匿名函数 $query 的范围内不可用
请参阅此处的示例 3:http://php.net/manual/en/functions.anonymous.php
您应该像这样使用 USE 结构从父作用域继承变量:
$state="chandigarh";
$users = $this->Users->find('all')
->where(['Users.role' => $role])
->innerJoinWith('UserDetail',function($query) use ($state) {
return $query->where(['UserDetail.state' => $state]);
})->toArray();
您应该删除覆盖 "$state"
的“”,应该是:$query->where(['UserDetail.state' => $state])
而不是 $query->where(['UserDetail.state' => "$state"])
我正在将静态值传递给我的以下查询,然后它运行良好。如果我将其更改为动态,则不会。
//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 变量动态传递给它?
这就是 PHP 的工作原理,它并不是真正与 CakePHP 相关的问题
该变量在匿名函数 $query 的范围内不可用 请参阅此处的示例 3:http://php.net/manual/en/functions.anonymous.php
您应该像这样使用 USE 结构从父作用域继承变量:
$state="chandigarh";
$users = $this->Users->find('all')
->where(['Users.role' => $role])
->innerJoinWith('UserDetail',function($query) use ($state) {
return $query->where(['UserDetail.state' => $state]);
})->toArray();
您应该删除覆盖 "$state"
的“”,应该是:$query->where(['UserDetail.state' => $state])
而不是 $query->where(['UserDetail.state' => "$state"])