/ / CakePHP 3 zostavuje komplexné spojenie pomocou nástroja na tvorbu dotazov - cakephp, build-query, cakephp-3.0

CakePHP 3 vybudovať komplexné spojenie pomocou dotazu Builder - cakephp, dotaz-builder, cakephp-3.0

Potrebujem dynamicky pridať spojenia do rovnakých tabuliek ... niečo také:

// 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

Problém je v tom, že nie je vybraná druhá hodnota- je nulová. Toto sa jednoducho vyrieši zmenou druhého typu spojenia na „INNER“, je to však problém, pretože neexistujú žiadne výsledky pre existujúci záznam v T, ale chýbajúci záznam v T_Values. Tento typ spojenia to zvládne:

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

Moja otázka znie: dá sa to dosiahnuť pomocou nástroja na tvorbu dotazov. Alebo lepšie ... môžete navrhnúť jednoduchší spôsob, ako to urobiť? Vďaka

odpovede:

0 pre odpoveď č. 1

Vyriešil som to „tvrdo“, ak mal niekto podobný problém:

$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"]
];