@@ -415,29 +415,49 @@ public function create(array $set)
415415 if ($ isCreatedField ){
416416 $ data [$ this ->_credentials ['createdField ' ]] = $ createdFieldParameterName ;
417417 }
418- }else {
419- $ i = 0 ;
420- foreach ($ set as $ row ) {
421- $ data [$ i ] = [];
422- $ this ->_validation ->setData ($ row );
423- foreach ($ row as $ column => $ value ) {
424- if ($ this ->_validation ->validation ($ column , null ) === FALSE ){
425- $ this ->_errors [] = $ this ->_validation ->getError ();
426- return false ;
427- }
428- $ data [$ i ][$ column ] = $ value ;
429- }
430- if (empty ($ data [$ i ])){
431- continue ;
432- }
433- if ($ isCreatedField ){
434- $ data [$ i ][$ this ->_credentials ['createdField ' ]] = $ createdFieldParameterName ;
418+ }
419+
420+ $ res = $ this ->query ($ this ->_insertQuery ($ data ));
421+ $ this ->reset ();
422+ return $ res ->numRows () > 0 ;
423+ }
424+
425+ /**
426+ * @param array $set
427+ * @return bool
428+ */
429+ public function createBatch (array $ set )
430+ {
431+ if ($ this ->_credentials ['writable ' ] === FALSE ){
432+ throw new WritableException ('' );
433+ }
434+ $ isCreatedField = !empty ($ this ->_credentials ['createdField ' ]);
435+ if ($ isCreatedField ){
436+ $ createdFieldParameterName = Parameters::add ($ this ->_credentials ['createdField ' ], \date ($ this ->_credentials ['timestampFormat ' ]));
437+ }
438+ $ data = [];
439+ $ i = 0 ;
440+ foreach ($ set as $ row ) {
441+ $ data [$ i ] = [];
442+ $ this ->_validation ->setData ($ row );
443+ foreach ($ row as $ column => $ value ) {
444+ if ($ this ->_validation ->validation ($ column , null ) === FALSE ){
445+ $ this ->_errors [] = $ this ->_validation ->getError ();
446+ return false ;
435447 }
436- ++$ i ;
448+ $ data [$ i ][$ column ] = $ value ;
449+ }
450+ if (empty ($ data [$ i ])){
451+ continue ;
437452 }
453+ if ($ isCreatedField ){
454+ $ data [$ i ][$ this ->_credentials ['createdField ' ]] = $ createdFieldParameterName ;
455+ }
456+ ++$ i ;
438457 }
439- $ res = $ this ->query ($ this ->_insertQuery ($ data ));
458+ $ res = $ this ->query ($ this ->_insertBatchQuery ($ data ));
440459 $ this ->reset ();
460+
441461 return $ res ->numRows () > 0 ;
442462 }
443463
@@ -636,21 +656,28 @@ public function _insertQuery(array $data): string
636656 $ columns = [];
637657 $ values = [];
638658
639- if (\count ($ data ) === \count ($ data , \COUNT_RECURSIVE )){
640- foreach ($ data as $ column => $ value ) {
641- $ column = \trim ($ column );
642- if ($ this ->_credentials ['allowedFields ' ] !== null && !\in_array ($ column , $ this ->_credentials ['allowedFields ' ])){
643- continue ;
644- }
645- $ columns [] = $ column ;
646- $ values [] = Helper::isSQLParameterOrFunction ($ value ) ? $ value : Parameters::add ($ column , $ value );
647- }
648- if (empty ($ columns )){
649- return '' ;
659+ foreach ($ data as $ column => $ value ) {
660+ $ column = \trim ($ column );
661+ if ($ this ->_credentials ['allowedFields ' ] !== null && !\in_array ($ column , $ this ->_credentials ['allowedFields ' ])){
662+ continue ;
650663 }
651- return $ sql
652- . ' ( ' . \implode (', ' , $ columns ) . ') VALUES ( ' . \implode (', ' , $ values ) . '); ' ;
664+ $ columns [] = $ column ;
665+ $ values [] = Helper::isSQLParameterOrFunction ($ value ) ? $ value : Parameters::add ($ column , $ value );
666+ }
667+ if (empty ($ columns )){
668+ return '' ;
653669 }
670+ return $ sql
671+ . ' ( ' . \implode (', ' , $ columns ) . ') VALUES ( ' . \implode (', ' , $ values ) . '); ' ;
672+ }
673+
674+ public function _insertBatchQuery ($ data ): string
675+ {
676+ $ sql = 'INSERT INTO '
677+ . ' '
678+ . (empty ($ this ->_STRUCTURE ['table ' ]) ? $ this ->getSchema () : end ($ this ->_STRUCTURE ['table ' ]));
679+ $ columns = [];
680+ $ values = [];
654681
655682 foreach ($ data as &$ row ) {
656683 $ value = [];
@@ -676,6 +703,7 @@ public function _insertQuery(array $data): string
676703 }
677704 $ multiValues [] = '( ' . \implode (', ' , $ value ) . ') ' ;
678705 }
706+
679707 return $ sql . ' ( ' . \implode (', ' , $ columns ) . ') VALUES '
680708 . \implode (', ' , $ multiValues ) . '; ' ;
681709 }
0 commit comments