我有几个关于加入Cakephp的问题

时间:2017-01-04 02:19:12

标签: cakephp cakephp-3.0

感谢您阅读。 我正在学习cakephp并且有一些关于加入Cakephp的问题。 我没有在互联网上找到任何合适的答案

1,innerjoin和innerjoinwith之间有什么区别(比如leftjoin和leftjoinwith)我认为这与性能问题有关,但无法找到任何线索。

2,我无法获得"匹配"之间的确切差异。和"包含" 我知道他们检索数据的方式是不同的,但我认为结果看起来相同,匹配和匹配的结果是使用innerjoin,而包含使用leftjoin。

但是我无法找到下面代码(使用包含)和匹配之间的区别。

$query = $articles->find()->contain([
'Comments' => function ($q) {
return $q
->select(['body', 'author_id'])
->where(['Comments.approved' => true]);
}
]);

3,什么是" _matchingData"匹配? 我读过这个描述,就是这样 " innerJoinWith()方法与matching()的工作方式相同,这意味着您可以使用点表示法来连接深层嵌套关联:同样,唯一的区别是不会向结果集添加其他列,并且不会设置_matchingData属性。"

但我找不到关于_matchingData的任何描述。即使在API ......它是什么?

你可以回复其中一个,没关系。请帮帮我

1 个答案:

答案 0 :(得分:2)

1,innerjoin和innerjoinwith之间有什么区别(比如leftjoin和leftjoinwith)我认为它与性能问题有关,但找不到任何线索。

=> (1)这里'innerJoinWith'是一个可调用的,它将应用右/内连接 (2)对于左连接'leftJoinWith'是可调用的

https://book.cakephp.org/3.0/en/orm/query-builder.html#using-innerjoinwith

https://book.cakephp.org/3.0/en/orm/query-builder.html#using-leftjoinwith

2,我无法得到“匹配”和“包含”之间的确切区别 我知道他们检索数据的方式是不同的,但我认为结果看起来与输入代码的结果相同,匹配和匹配是使用innerjoin,而包含使用leftjoin。

但是我找不到下面代码(使用包含)和匹配之间的区别。

$query = $articles->find()->contain([
'Comments' => function ($q) {
return $q
->select(['body', 'author_id'])
->where(['Comments.approved' => true]);
}
]);

=>简而言之,包含应用leftJoin和匹配应用右/内连接到查询。 请阅读此链接https://book.cakephp.org/3.0/en/orm/query-builder.html#using-innerjoinwith

上的第一行

3,匹配中的“_matchingData”是什么? 我读过这个描述,就是这样 “innerJoinWith()方法与matching()的工作方式相同,这意味着您可以使用点表示法来连接深层嵌套关联:同样,唯一的区别是不会在结果集中添加其他列,也不会_matchingData属性将被设置。“

但是我找不到关于_matchingData的任何描述。即使在API ......它是什么?

=> _matchingData()是使用matching()时创建的实体属性。它包含与

匹配的数据
$query = $articles->find(); 
$query = $query->matching('Comments', function($q){
            $q->select(['Comments.body', 'Comments.author_id']);
            $q->where(['Comments.is_approved' => 1]);
        return $q;
});

上面的查询将包含与Comments.body,Comments.author_id

一起包含的_matchingData属性