CakePHP 3 使用查询构建器构建复杂连接

CakePHP 3 build complex join using query builder

我需要在同一个表上动态添加连接...像这样:

// foreach ... as $id
$options['join']['T_Values' . $id] = [
    'type' => 'LEFT',
    'table' => 't_values',
    'conditions' => ['T_Values' . $id . '.t_id = T.id']
];
$options['join']['Values' . $id] = [
    'type' => 'LEFT',
    'table' => 'values',
    'conditions' => ['Values' . $id . '.id = T_Values' . $id . '.value_id', 'Values' . $id . '.v_id' => $id]
];

$options['fields']['x_' . $id] = 'Values' . $id . '.name';
// endforeach

问题是未选择第二个值 - 它为空。这可以通过将第二个连接类型更改为 'INNER' 来简单地解决,但这是一个问题,因为 T 中的现有记录没有结果,但 T_Values 中缺少记录。这种类型的连接可以处理它:

SELECT … 
FROM t T 
  LEFT JOIN (t_values T_Values2
    INNER JOIN values Values2 ON 
    (Values2.id = T_Values2.value_id AND Values2.v_id = 2)
  ) ON T_Values2.t_id = T.id  
  LEFT JOIN (t_values T_Values3 
    INNER JOIN values Values3 ON 
    (Values3.id = T_Values3.value_id AND Values3.v_id = 3)
  ) ON T_Values3.t_id = T.id  
WHERE T.k_id = 1 GROUP BY T.id

我的问题是:这可以通过查询生成器来实现吗?或者更好……你能建议更简单的方法吗?谢谢

我用"hard"方法解决了,如果有人有类似问题:

$options['join'][] = [
    'type' => 'LEFT',
    'table' => '(t_values T_Values' . $id . ' INNER JOIN values Values' . $id . ' ON Values' . $id . '.id = T_Values' . $id . '.value_id AND Values' . $id . '.v_id = ' . $id . ')',
    'conditions' => ['T_Values' . $id . '.t_id = T.id']
];