/ / CakePHP 3 बिल्ड कॉम्प्लेक्स क्वेरी बिल्डर का उपयोग करके शामिल होता है - केकफैप, क्वेरी-बिल्डर, केकफैप-3.0

CakePHP 3 बिल्ड बिल्ड क्वेरी-बिल्डर का उपयोग करके सम्मिलित होते हैं - केकफैप, क्वेरी-बिल्डर, केकफैप-3.0

मुझे गतिशील रूप से एक ही टेबल पर जुड़ने की जरूरत है ... कुछ इस तरह से:

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

मेरा प्रश्न है: क्या इसे क्वेरी बिल्डर के साथ प्राप्त किया जा सकता है। या बेहतर ... क्या आप इसे करने के लिए अधिक सरल तरीका सुझा सकते हैं? धन्यवाद

उत्तर:

जवाब के लिए 0 № 1

मैंने इसे "कठिन" तरीके से हल किया, अगर किसी को समान समस्या थी:

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