@@ -76,16 +76,38 @@ private function simplifyParams($params)
7676 foreach ($ params as $ key => $ value ) {
7777 $ key = ': ' . ltrim ($ key , ': ' );
7878 if (is_array ($ value )) {
79- if (isset ($ value [0 ]) && is_array ( $ value [ 0 ])) {
80- foreach ( $ value [0 ] as $ valKey => $ valVal ) {
81- $ newParams [ $ key . ' _ ' . $ valKey ] = $ valVal ;
82- }
83- } elseif (! isset ( $ value [ ' bind ' ]) || $ value ['bind ' ] === true ) {
79+ if (! isset ($ value [' bind ' ])) {
80+ $ value [' bind ' ] = true ;
81+ }
82+
83+ if ( $ value ['bind ' ] === true ) {
8484 if (isset ($ value [0 ]) && isset ($ value [1 ])) {
8585 $ newParams [$ key ] = [$ value [0 ], $ value [1 ]];
8686 } elseif (isset ($ value [0 ])) {
8787 $ newParams [$ key ] = $ value [0 ];
8888 }
89+ } elseif ($ value ['bind ' ] === 'tuple ' ) {
90+
91+ if (isset ($ value [0 ]) && is_array ($ value [0 ])) {
92+ //скинем индексы
93+ $ value [0 ] = array_values ($ value [0 ]);
94+
95+ foreach ($ value [0 ] as $ valKey => $ valVal ) {
96+ if (is_array ($ valVal )) {
97+ foreach ($ valVal as $ k => $ v ) {
98+ $ newParams [$ key . '_ ' . $ valKey . '_ ' . $ k ] = $ v ;
99+ }
100+ } else {
101+ $ newParams [$ key . '_ ' . $ valKey ] = $ valVal ;
102+ }
103+ }
104+ } elseif (isset ($ value [0 ])) {
105+ $ newParams [$ key ] = $ value [0 ];
106+ }
107+ } elseif (isset ($ value [0 ]) && is_array ($ value [0 ])) {
108+ foreach ($ value [0 ] as $ valKey => $ valVal ) {
109+ $ newParams [$ key . '_ ' . $ valKey ] = $ valVal ;
110+ }
89111 }
90112 } else {
91113 $ newParams [$ key ] = $ value ;
@@ -152,6 +174,30 @@ private function replaceComment($comment, $queryInComment, $paramName)
152174 $ queryInComment = preg_replace ('/:@ ' . preg_quote ($ paramName ) . '/ ' , $ replacement , $ queryInComment );
153175 } elseif ($ bind === 'text ' ) {
154176 $ queryInComment = preg_replace ('/ ' . preg_quote ($ paramName ) . '/ ' , $ value , $ queryInComment );
177+ } elseif ($ bind === 'tuple ' ) {
178+ if (is_array ($ paramValue [0 ])) {
179+ $ replacements = [];
180+ //скинем индексы
181+ $ paramValue [0 ] = array_values ($ paramValue [0 ]);
182+
183+ foreach ($ paramValue [0 ] as $ keyParam => $ val ) {
184+ $ name = ': ' . $ paramName . '_ ' . $ keyParam ;
185+ if (is_array ($ val )) {
186+ $ valArr = [];
187+ foreach (array_keys ($ val ) as $ keyVal ) {
188+ $ valArr [] = $ name . '_ ' . $ keyVal ;
189+ }
190+ $ valName = implode (', ' , $ valArr );
191+ } else {
192+ $ valName = $ name ;
193+ }
194+ $ replacements [] = '( ' . $ valName . ') ' ;
195+ }
196+ $ replacement = implode (', ' , $ replacements );
197+ } else {
198+ $ replacement = $ paramValue ;
199+ }
200+ $ queryInComment = preg_replace ('/:@ ' . preg_quote ($ paramName ) . '/ ' , $ replacement , $ queryInComment );
155201 }
156202 } else {
157203 $ queryInComment = '' ;
@@ -163,7 +209,8 @@ private function replaceComment($comment, $queryInComment, $paramName)
163209 /**
164210 * Ищет параметр в массиве $this->params
165211 * @param string $name имя параметра
166- * @return array|bool массив ['имя_параметра_без_ведущего_двоеточия', 'значение_параметра'] или ложь если параметра нет
212+ * @return array|bool массив ['имя_параметра_без_ведущего_двоеточия', 'значение_параметра'] или ложь если параметра
213+ * нет
167214 */
168215 private function getParam ($ name )
169216 {
0 commit comments