感谢您阅读。 我正在学习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 ......它是什么?
你可以回复其中一个,没关系。请帮帮我
答案 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属性