CakePhp“包含”与强制连接?

CakePhp“包含”与强制连接?,php,mysql,cakephp,join,Php,Mysql,Cakephp,Join,所以,我正在与CakePHP和基于MVC的项目合作,将一系列表连接在一起。在我的研究中,我发现了两种主要的连接方式 “contain”-其重点是使用MVC框架模型中的现有关联 “强制联接”-类似于SQL的内部联接类型子句,允许在特定条件下发生多个联接 无论如何。我一开始使用contain将表聚合在一起,这很有效,但当我需要使该功能变得更复杂时,我发现必须使用强制联接 下面是我聚合表的“包含”方式,它是有效的,我有一个类似的强制连接的结构化代码块,我想知道为什么我的强制连接不起作用?我在文档中做了

所以,我正在与CakePHP和基于MVC的项目合作,将一系列表连接在一起。在我的研究中,我发现了两种主要的连接方式

“contain”-其重点是使用MVC框架模型中的现有关联

“强制联接”-类似于SQL的内部联接类型子句,允许在特定条件下发生多个联接

无论如何。我一开始使用contain将表聚合在一起,这很有效,但当我需要使该功能变得更复杂时,我发现必须使用强制联接

下面是我聚合表的“包含”方式,它是有效的,我有一个类似的强制连接的结构化代码块,我想知道为什么我的强制连接不起作用?我在文档中做了一些研究,一切似乎都是正确的。我错过了什么

“包含”:

$tags = $this->OfficialTeams->Tags->find('all', ['conditions' => ['official' => true], 
     'contain' => ["Questions.Answers.Posts"] ]);
“强制连接”

$options['joins'] = array(
                array(
                    'table' -> 'Users',
                    'alias' -> 'Users',
                    'type' -> 'INNER',
                    'conditions' -> array('Users.id = Tag.user_id')
                ),
                array(
                    'table' -> 'Posts',
                    'alias' -> 'Post',
                    'type' -> 'INNER',
                    'conditions' -> array('Users.id = Posts.user_id')
                ),
                array(
                    'table' -> 'Questions',
                    'alias' -> 'Question',
                    'type' -> 'INNER',
                    'conditions' -> array('Questions.post_id = Posts.id')
                ),
                array(
                    'table' -> 'Answers',
                    'alias' -> 'Answer',
                    'type' -> 'INNER',
                    'conditions' -> array('Answers.post_id = Posts.id')
                )
   );
$options['conditions'] = array(['official' => true]);
$tags = $this->OfficialTeams->Tags->find('all', $options);
官方团队、标记、答案、用户、帖子都是SQL数据库中的表。此代码位于OfficialTeams控制器中,这就是为什么在执行查找$This时首先引用官方团队的原因

我也知道为什么对于“contain”不起作用的更复杂的联接,这是因为“contains”使用了表中现有的关系,但它不能使用hasAndBelongsToMany关联。我在CakePHP文档中发现了这一点。

在任何情况下,关于我的强制连接查询为什么不起作用的任何帮助都将不胜感激。谢谢

编辑:表关系。

再次编辑:我的版本是Cake 3.3.10,关于预期行为和当前行为。我有一个表单上的数据,一旦它被聚合并从数据库中从各个表中提取,它就会被呈现和计算。预期的行为只是出现两个数字,这些数字表示官方团队针对特定用户提出的问题/帖子/答案的数量。至于当前的行为,问题/帖子/答案的数量是一个警告:array\u map,参数2应该是一个数组。当前数据段的值为空


另一种奇怪的行为。当我通过“throws”调用打印查询时,强制它失败,以便打印查询。“包含”代码块和“强制连接”代码块的查询是完全相同的查询

我正在使用“contain”来表示一个类似的老鼠窝,当我熟练地操作递归参数时,我发现它是有效的


有没有办法创建一个中间表来处理多对多关系?这就是我能够使用“包含”所做的,它看起来更像我自己的蛋糕。

在这里输入您的表关系。嗨@RayannNayran,我在表关系中添加了。请更具体一点,不起作用不是正确的问题描述。到底发生了什么,你希望发生什么?生成的查询是什么样子的?另外,请务必在vendor/CakePHP/CakePHP/version.txt或lib/Cake/version.txt中最后一行提到您的确切CakePHP版本-谢谢!ps,->是无效的PHP.Hey@ndm。我把你问题的答案放在“再次编辑”部分。基本上,我的Cake版本是3.3.10,对“包含”和“强制联接”的查询都是完全相同的查询。对于初学者来说,你看到的是错误的文档,你链接的是CakePHP 2.x,CakePHP 3.x中不再有联接选项,它要么是联接,或者使用查询生成器提供的连接方法之一:|。无论何时收到错误,请始终发布完整的错误,也就是说,包括完整的stacktrace,最好是从日志中复制的,并且可以以正确可读的方式使用。