在此问题之前,我遇到了与同一主题相关的另一个问题。问题已经分类谢谢ta @ndm。
链接上一个问题:Cakephp 3. Windows and Linux OS returning different result when querying the database
我有一篇文章页面,我正在使用文章检索相关数据。文章评论。
我有以下代码行
$this->Articles->find()->contain('ArticleComments');
本地Windows 10计算机和生产Debian服务器上的这行代码检索包括其注释在内的所有文章。使用Cakephp调试函数 pr($ object)
找到返回结果屏幕截图的链接返回结果的屏幕截图:http://s29.postimg.org/f76brygw6/cakephp.jpg
现在唯一的问题是,只在生产的Debian服务器上发生,尽管前面提到的代码行正在返回文章和文章评论,但我不能使用这个对象。例如,如果我尝试以下代码:
$this->Articles->find()->contain('ArticleComments')->toArray();
或者
$this->set('articles', $this->Articles->find()->contain('ArticleComments'));
我收到此错误:
无法将值转换为整数 InvalidArgumentException
tmp / error.log中出现以下错误:http://s14.postimg.org/4e88qp6j4/cakephp_error.jpg
同样,此错误仅在我的Debian服务器上发生,如果我通过以下代码检索文章,则可以正常工作。
$this->Articles->find()
我已采取哪些措施来解决此问题:
答案 0 :(得分:0)
问题可能是你加载关联的方式。您需要告诉Cake您的表类所在的插件。而不是这样做:
$this->hasMany('ArticleComments')
你需要这个:
$this->hasMany('Comments.ArticleComments')
答案 1 :(得分:0)
问题解决了!
问题不是来自Linux也不是CakePHP。
在我的本地机器上,恰好是Windows操作系统,我正在运行MySQL版本5.6.24,在我的实时服务器上运行Linux debian,我有MySQL 5.5.46。
我有数据库列" datetime" 5.6支持但在版本5.5中导致问题。
我只是将列类型更改为" timestamp"问题得到解决。
两种环境都在运行不同的操作系统,并且花费了大量时间来确保问题不是Windows到Linux的问题(即文件名区分大小写)。 CakePHP误导性错误消息也延误了我解决问题。
一个多月后我很高兴问题得到解决:D