检索关联数据时出错。仅限Linux

时间:2015-11-29 12:11:10

标签: cakephp-3.0

在此问题之前,我遇到了与同一主题相关的另一个问题。问题已经分类谢谢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()

我已采取哪些措施来解决此问题:

  1. 三次检查(两次)表和类名称。 100%确定问题不是文件命名。
  2. 检查了两台机器PHP和Cakephp版本。我的Debian服务器运行PHP 5.6.15-1~dotdeb + zts + 7.1(cli),My Windows 10运行PHP 5.6.8(cli)。 Cakephp版本是一样的。 Cakephp 3.1.4

2 个答案:

答案 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