5
5
use UnexpectedValueException ;
6
6
7
7
class Insert extends InsertUpdateStatement {
8
- /**
9
- * @var array
10
- */
8
+ /** @var array */
11
9
private $ fields = array ();
12
- /**
13
- * @var array
14
- */
10
+ /** @var array */
15
11
private $ update = array ();
16
- /**
17
- * @var string
18
- */
12
+ /** @var string */
19
13
private $ table = null ;
20
- /**
21
- * @var string
22
- */
14
+ /** @var string */
23
15
private $ keyField = null ;
24
- /**
25
- * @var bool
26
- */
16
+ /** @var bool */
27
17
private $ ignore = false ;
28
- /**
29
- * @var Select
30
- */
18
+ /** @var Select */
31
19
private $ from = null ;
32
- /**
33
- * @var callable
34
- */
20
+ /** @var callable */
35
21
private $ tableFields = null ;
36
22
37
23
/**
@@ -77,12 +63,7 @@ public function setKey($field) {
77
63
* @return $this
78
64
*/
79
65
public function add ($ field , $ value ) {
80
- if ($ this ->isFieldNameValid ($ field )) {
81
- throw new UnexpectedValueException ('Field name is invalid ' );
82
- }
83
- $ sqlField = $ field ;
84
- $ sqlValue = $ this ->db ()->quote ($ value );
85
- $ this ->fields [$ sqlField ] = $ sqlValue ;
66
+ $ this ->fields = $ this ->addTo ($ this ->fields , $ field , $ value );
86
67
return $ this ;
87
68
}
88
69
@@ -93,12 +74,7 @@ public function add($field, $value) {
93
74
* @return $this
94
75
*/
95
76
public function update ($ field , $ value ) {
96
- if ($ this ->isFieldNameValid ($ field )) {
97
- throw new UnexpectedValueException ('Field name is invalid ' );
98
- }
99
- $ sqlField = $ field ;
100
- $ sqlValue = $ this ->db ()->quote ($ value );
101
- $ this ->update [$ sqlField ] = $ sqlValue ;
77
+ $ this ->update = $ this ->addTo ($ this ->update , $ field , $ value );
102
78
return $ this ;
103
79
}
104
80
@@ -148,13 +124,9 @@ public function addOrUpdateExpr($str) {
148
124
* @return $this
149
125
*/
150
126
public function addAll (array $ data , array $ mask = null ) {
151
- if ($ mask !== null ) {
152
- $ data = array_intersect_key ($ data , array_combine ($ mask , $ mask ));
153
- }
154
- $ data = $ this ->clearValues ($ data );
155
- foreach ($ data as $ field => $ value ) {
127
+ $ this ->addAllTo ($ data , $ mask , function ($ field , $ value ) {
156
128
$ this ->add ($ field , $ value );
157
- }
129
+ });
158
130
return $ this ;
159
131
}
160
132
@@ -164,15 +136,11 @@ public function addAll(array $data, array $mask = null) {
164
136
* @return $this
165
137
*/
166
138
public function updateAll (array $ data , array $ mask = null ) {
167
- if ($ mask !== null ) {
168
- $ data = array_intersect_key ($ data , array_combine ($ mask , $ mask ));
169
- }
170
- $ data = $ this ->clearValues ($ data );
171
- foreach ($ data as $ field => $ value ) {
172
- if ($ field != $ this ->keyField ) {
139
+ $ this ->addAllTo ($ data , $ mask , function ($ field , $ value ) {
140
+ if ($ field !== $ this ->keyField ) {
173
141
$ this ->update ($ field , $ value );
174
142
}
175
- }
143
+ });
176
144
return $ this ;
177
145
}
178
146
@@ -234,6 +202,38 @@ public function __toString() {
234
202
return $ query ;
235
203
}
236
204
205
+ /**
206
+ * @param array $fields
207
+ * @param string $field
208
+ * @param bool|int|float|string $value
209
+ * @return array
210
+ */
211
+ private function addTo ($ fields , $ field , $ value ) {
212
+ if ($ this ->isFieldNameValid ($ field )) {
213
+ throw new UnexpectedValueException ('Field name is invalid ' );
214
+ }
215
+ $ sqlField = $ field ;
216
+ $ sqlValue = $ this ->db ()->quote ($ value );
217
+ $ fields [$ sqlField ] = $ sqlValue ;
218
+ return $ fields ;
219
+ }
220
+
221
+ /**
222
+ * @param array $data
223
+ * @param array $mask
224
+ * @param callable $fn
225
+ * @return $this
226
+ */
227
+ private function addAllTo ($ data , $ mask , $ fn ) {
228
+ if ($ mask !== null ) {
229
+ $ data = array_intersect_key ($ data , array_combine ($ mask , $ mask ));
230
+ }
231
+ $ data = $ this ->clearValues ($ data );
232
+ foreach ($ data as $ field => $ value ) {
233
+ call_user_func ($ fn , $ field , $ value );
234
+ }
235
+ }
236
+
237
237
/**
238
238
* @return string
239
239
*/
0 commit comments