CakePHP:按儿童表列分组

时间:2019-04-15 04:14:50

标签: cakephp orm

我不确定如何在子表上应用分组依据。

用户有很多文章。

以下将导致错误:

$UsersTable= $this->getTableLocator()->get('Users');

$query = $UsersTable->find();

$query->contain(["Articles"]);

$query->group(["Articles.type"]); // ERROR

添加匹配项可以解决此问题,但是它应该如何工作?

$UsersTable= $this->getTableLocator()->get('Users');
$query = $UsersTable->find();
$query->contain(["Articles"]);
// just calling matching without any condition
$query->matching(
  "Articles", function($q) {
    return $q;
  }
);
$query->group(["Articles.type"]); // WORKS!

在不依靠匹配的情况下,还有其他合适的方法来使它工作吗?

1 个答案:

答案 0 :(得分:0)

首先,您必须通过Users之类的联接方法之一在Articlesmatching之间联接,然后才能使用group()方法

contain()并非在所有情况下都使用联接,尤其是对于您的关系:hasMany

mysql的group by需要这些表之间的连接才能工作