在 CakePHP 3 中包含连接后连接子查询

Join sub-query after contain joins in CakePHP 3

我目前在 CakePHP 3 中遇到问题 - 我正在尝试将子查询连接到现有查询,但是 ORM 在处理 "contain" 方法之前添加子查询,但子查询连接依赖于一些包含的表。有什么办法可以强制加入 运行 after contain?

我的代码很长而且很复杂,但我会写一个简单的例子:

$articles = $this->find()
  ->select(['Articles.id', 'Articles.title', 'Users.id'])
  ->contain(['Users','Tags']);

$subQuery = $this->find()
  ->select(['text' => 'Articles.body', 'user_id' => 'Users.id', 'article_id' => 'Articles.id'])
  ->contain(['Users','Tags']);

$articles
  ->join([
    'ArticleText' => [
      'table' => $subQuery,
      'type' => 'LEFT',
      'conditions' => ['ArticleText.user_id = Users.id', 'ArticleText.article_id = Articles.id']
    ]);

现在这段代码过于简单,显然没有必要,但问题本质上是ORM会生成一个查询,首先尝试执行连接,连接会失败,因为Users.id还没有连接然而。有什么方法可以先让 contains 运行?

据我所知,订单(还)不会受到影响,包含和匹配(这也是 *JoinWith() 方法)将在手动连接之后出现,另请参见 https://github.com/cakephp/cakephp/issues/10746.

所以您可能也必须手动加入 Users 协会,而不是使用 contain()