@@ -62,105 +62,112 @@ export class UtilsMethode {
6262 let i = 0 ;
6363
6464 for ( field in filter ) {
65- const operand = Object . keys ( filter [ field ] ) . pop ( ) ;
66- const value =
67- operand === FilterOperand . like
68- ? `%${ filter [ field ] [ operand ] } %`
69- : filter [ field ] [ operand ] ;
70-
71- if ( relations . has ( field ) ) {
72- const relation = metadata . relations . find (
73- ( item ) => item . propertyName === field
74- ) ;
75- const {
76- inverseSidePropertyPath,
77- inverseEntityMetadata : { target, name } ,
78- } = relation ;
79- const resourceRelationName = snakeToCamel ( name ) ;
80- const primaryColumn = metadata . primaryColumns [ 0 ] . databaseName ;
81- switch ( relation . relationType ) {
82- case 'many-to-many' : {
83- const { inverseJoinColumns, joinColumns } =
84- relation . isManyToManyOwner ? relation : relation . inverseRelation ;
85- const relationProps = relation . isManyToManyOwner
86- ? relation
87- : relation . inverseRelation ;
88- const { joinTableName } = relationProps ;
89- const { databaseName : queryJoinPropsName } =
90- relation . isManyToManyOwner
91- ? inverseJoinColumns [ 0 ]
92- : joinColumns [ 0 ] ;
93- const { databaseName : selectJoinPropsName } =
94- relation . isManyToManyOwner
95- ? joinColumns [ 0 ]
96- : inverseJoinColumns [ 0 ] ;
97- const onQuery = `${ joinTableName } .${ queryJoinPropsName } = ${ resourceRelationName } .${ primaryColumn } ` ;
98- const selectQuery = `${ joinTableName } .${ selectJoinPropsName } ` ;
99-
100- const query = builder
101- . subQuery ( )
102- . select ( selectQuery )
103- . from ( joinTableName , joinTableName )
104- . leftJoin ( resourceRelationName , resourceRelationName , onQuery )
105- . where ( `${ selectQuery } = ${ builder . alias } .${ primaryColumn } ` )
106- . getQuery ( ) ;
107- resultExpression . push ( {
108- expression : OperandMapForNullRelation [ operand ] . replace (
109- 'EXPRESSION' ,
110- query
111- ) ,
112- params : null ,
113- } ) ;
114- break ;
65+ const operands = Object . keys ( filter [ field ] ) ;
66+ for ( const operand of operands ) {
67+ const value =
68+ operand === FilterOperand . like
69+ ? `%${ filter [ field ] [ operand ] } %`
70+ : filter [ field ] [ operand ] ;
71+
72+ if ( relations . has ( field ) ) {
73+ const relation = metadata . relations . find (
74+ ( item ) => item . propertyName === field
75+ ) ;
76+ const {
77+ inverseSidePropertyPath,
78+ inverseEntityMetadata : { target, name } ,
79+ } = relation ;
80+ const resourceRelationName = snakeToCamel ( name ) ;
81+ const primaryColumn = metadata . primaryColumns [ 0 ] . databaseName ;
82+ switch ( relation . relationType ) {
83+ case 'many-to-many' : {
84+ const { inverseJoinColumns, joinColumns } =
85+ relation . isManyToManyOwner
86+ ? relation
87+ : relation . inverseRelation ;
88+ const relationProps = relation . isManyToManyOwner
89+ ? relation
90+ : relation . inverseRelation ;
91+ const { joinTableName } = relationProps ;
92+ const { databaseName : queryJoinPropsName } =
93+ relation . isManyToManyOwner
94+ ? inverseJoinColumns [ 0 ]
95+ : joinColumns [ 0 ] ;
96+ const { databaseName : selectJoinPropsName } =
97+ relation . isManyToManyOwner
98+ ? joinColumns [ 0 ]
99+ : inverseJoinColumns [ 0 ] ;
100+ const onQuery = `${ joinTableName } .${ queryJoinPropsName } = ${ resourceRelationName } .${ primaryColumn } ` ;
101+ const selectQuery = `${ joinTableName } .${ selectJoinPropsName } ` ;
102+
103+ const query = builder
104+ . subQuery ( )
105+ . select ( selectQuery )
106+ . from ( joinTableName , joinTableName )
107+ . leftJoin ( resourceRelationName , resourceRelationName , onQuery )
108+ . where ( `${ selectQuery } = ${ builder . alias } .${ primaryColumn } ` )
109+ . getQuery ( ) ;
110+ resultExpression . push ( {
111+ expression : OperandMapForNullRelation [ operand ] . replace (
112+ 'EXPRESSION' ,
113+ query
114+ ) ,
115+ params : null ,
116+ } ) ;
117+ break ;
118+ }
119+ case 'one-to-many' : {
120+ const query = builder
121+ . subQuery ( )
122+ . select ( `${ resourceRelationName } .${ inverseSidePropertyPath } ` )
123+ . from ( target , resourceRelationName )
124+ . where (
125+ `${ resourceRelationName } .${ inverseSidePropertyPath } = ${ builder . alias } .id`
126+ )
127+ . getQuery ( ) ;
128+ resultExpression . push ( {
129+ expression : OperandMapForNullRelation [ operand ] . replace (
130+ 'EXPRESSION' ,
131+ query
132+ ) ,
133+ params : null ,
134+ } ) ;
135+ break ;
136+ }
137+ default : {
138+ resultExpression . push ( {
139+ expression : `${ preparedResourceName } .${ field . toString ( ) } ${ OperandMapForNull [
140+ operand
141+ ] . replace (
142+ 'EXPRESSION' ,
143+ UtilsMethode . getParamName (
144+ `${ preparedResourceName } .${ field } ` ,
145+ i
146+ )
147+ ) } `,
148+ params : null ,
149+ } ) ;
150+ }
115151 }
116- case 'one-to-many' : {
117- const query = builder
118- . subQuery ( )
119- . select ( `${ resourceRelationName } .${ inverseSidePropertyPath } ` )
120- . from ( target , resourceRelationName )
121- . where (
122- `${ resourceRelationName } .${ inverseSidePropertyPath } = ${ builder . alias } .id`
123- )
124- . getQuery ( ) ;
125- resultExpression . push ( {
126- expression : OperandMapForNullRelation [ operand ] . replace (
127- 'EXPRESSION' ,
128- query
152+ } else {
153+ resultExpression . push ( {
154+ expression : `${ preparedResourceName } .${ field . toString ( ) } ${ OperandsMap [
155+ operand
156+ ] . replace (
157+ 'EXPRESSION' ,
158+ UtilsMethode . getParamName ( `${ preparedResourceName } .${ field } ` , i )
159+ ) } `,
160+ params : {
161+ name : UtilsMethode . getParamName (
162+ `${ preparedResourceName } .${ field } ` ,
163+ i
129164 ) ,
130- params : null ,
131- } ) ;
132- break ;
133- }
134- default : {
135- resultExpression . push ( {
136- expression : `${ preparedResourceName } .${ field . toString ( ) } ${ OperandMapForNull [
137- operand
138- ] . replace (
139- 'EXPRESSION' ,
140- UtilsMethode . getParamName ( `${ preparedResourceName } .${ field } ` , i )
141- ) } `,
142- params : null ,
143- } ) ;
144- }
165+ val : value ,
166+ } ,
167+ } ) ;
145168 }
146- } else {
147- resultExpression . push ( {
148- expression : `${ preparedResourceName } .${ field . toString ( ) } ${ OperandsMap [
149- operand
150- ] . replace (
151- 'EXPRESSION' ,
152- UtilsMethode . getParamName ( `${ preparedResourceName } .${ field } ` , i )
153- ) } `,
154- params : {
155- name : UtilsMethode . getParamName (
156- `${ preparedResourceName } .${ field } ` ,
157- i
158- ) ,
159- val : value ,
160- } ,
161- } ) ;
169+ i ++ ;
162170 }
163- i ++ ;
164171 }
165172
166173 return resultExpression ;
0 commit comments