Cakephp 查询生成器出现间歇性问题-序列化';关闭';不允许
在DebugKit中,当我单击变量时,唯一看到的是:Cakephp 查询生成器出现间歇性问题-序列化';关闭';不允许,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,在DebugKit中,当我单击变量时,唯一看到的是: Serialization of 'Closure' is not allowed 例如,myindex函数的整个代码: $data = $this->Seasons->find() ->where(['Seasons.user_id' => $this->Auth->user('id')]); foreach($data as $season){ $s = $season->id;
Serialization of 'Closure' is not allowed
例如,myindex
函数的整个代码:
$data = $this->Seasons->find()
->where(['Seasons.user_id' => $this->Auth->user('id')]);
foreach($data as $season){
$s = $season->id;
$leagues = $this->Leagues->find()->innerJoinWith('Games', function ($q) use($s) {
return $q->where(['Games.season_id' => $s]);
}
)
->where(['Leagues.user_id' => $this->Auth->user('id')])
->distinct(['Leagues.name'])
->order(['Leagues.name']);
foreach($leagues as $league){
$l = $league->id;
$gametypes = $this->GameTypes->find()->innerJoinWith('Games', function ($q) use($s, $l) {
return $q->where([
'Games.season_id' => $s,
'Games.league_id' => $l
]);
}
)
->distinct(['GameTypes.sort_order'])
->order(['GameTypes.sort_order']);
//set values to data
$league["game_types"] = $gametypes;
}
//set values to data
$season['leagues'] = $leagues;
}
$this->set(compact('data'));
对我来说,这是一个断断续续的问题。在某些情况下,我可以很好地看到DebugKit的变量,而在其他情况下则会出现此错误,我必须使用debug()
查看变量的内容
编辑#1
蛋糕版:“3.3.10”
编辑#2
代码被实际不起作用的代码替换。事实证明,以前的代码是有效的。这个,不是
我开始怀疑,每当我试图构建查询对象并用其他查询对象填充键时,就会出现这个问题
编辑#3
我想我找到了解决办法。如果我在所有查询中调用toArray()
,DebugKit
将显示实际内容,而不是错误
我认为我对《编辑2》的怀疑是对的。在另一个闭包中附加本质上是闭包的东西是
DebugKit
不喜欢的?问题是,像我这样到处调用toArray()
有什么问题吗?我必须在所有查询中调用toArray()
。每当收到错误时,请始终发布完整的错误,也就是说,包括完整的堆栈跟踪(最好是从日志中以正确可读的方式复制),即使这个问题对于熟悉CakePHP的人来说是显而易见的!另外,请始终提及您的确切CakePHP版本(在vendor/CakePHP/CakePHP/version.txt
中的最后一行),在这种情况下,也请提及调试工具包版本(vendor/CakePHP/debug_kit/version.txt
)-谢谢!发布的错误消息是我在DebugKit中单击变量时看到的。也没有堆栈跟踪。页面呈现正确,我只是看不到变量的内容,它会显示该消息。通常每个错误都应该与stacktrace一起记录。。。也许调试工具包明确地吞下了它。在任何情况下,您的调试工具包版本仍然未知。还可以尝试将您的依赖项(CakePHP以及调试工具包)升级到最新版本(3.3
分支中的最新CakePHP是3.3.15
,最新兼容的调试工具包版本是3.9.3
),我想我找到了解决方案。。。需要到处调用toArray()。。。