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



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

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

$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。有没有办法先让包含运行?

AFAIK 顺序(尚(不能受到影响,包含和匹配(这也是*JoinWith()方法(将在手动连接之后出现,另请参阅 https://github.com/cakephp/cakephp/issues/10746

因此,您可能也必须手动加入Users关联,而不是使用 contain() .

最新更新