File tree Expand file tree Collapse file tree 3 files changed +19
-15
lines changed Expand file tree Collapse file tree 3 files changed +19
-15
lines changed Original file line number Diff line number Diff line change @@ -109,6 +109,7 @@ Model
109
109
- Added before and after events to ``BaseModel::insertBatch() `` and ``BaseModel::updateBatch() `` methods. See :ref: `model-events-callbacks `.
110
110
- Added ``Model::allowEmptyInserts() `` method to insert empty data. See :ref: `Using CodeIgniter's Model <model-allow-empty-inserts >`
111
111
- Added new :ref: `entities-property-casting ` class ``IntBoolCast `` for Entity.
112
+ - Improved the SQL structure for ``Builder::updateBatch() ``. See :ref: `update-batch ` for the details.
112
113
113
114
Libraries
114
115
=========
Original file line number Diff line number Diff line change @@ -939,6 +939,8 @@ Or as an array:
939
939
You may also use the ``$builder->set() `` method described above when
940
940
performing updates.
941
941
942
+ .. _update-batch :
943
+
942
944
UpdateBatch
943
945
===========
944
946
Original file line number Diff line number Diff line change 2
2
3
3
$ data = [
4
4
[
5
- 'title ' => 'My title ' ,
6
- 'name ' => 'My Name 2 ' ,
7
- 'date ' => 'My date 2 ' ,
5
+ 'title ' => 'Title 1 ' ,
6
+ 'name ' => 'Name 1 ' ,
7
+ 'date ' => 'Date 1 ' ,
8
8
],
9
9
[
10
- 'title ' => 'Another title ' ,
11
- 'name ' => 'Another Name 2 ' ,
12
- 'date ' => 'Another date 2 ' ,
10
+ 'title ' => 'Title 2 ' ,
11
+ 'name ' => 'Name 2 ' ,
12
+ 'date ' => 'Date 2 ' ,
13
13
],
14
14
];
15
15
16
16
$ builder ->updateBatch ($ data , 'title ' );
17
17
/*
18
18
* Produces:
19
- * UPDATE `mytable` SET `name` = CASE
20
- * WHEN `title` = 'My title' THEN 'My Name 2'
21
- * WHEN `title` = 'Another title' THEN 'Another Name 2'
22
- * ELSE `name` END,
23
- * `date` = CASE
24
- * WHEN `title` = 'My title' THEN 'My date 2'
25
- * WHEN `title` = 'Another title' THEN 'Another date 2'
26
- * ELSE `date` END
27
- * WHERE `title` IN ('My title','Another title')
19
+ * UPDATE `mytable`
20
+ * INNER JOIN (
21
+ * SELECT 'Title 1' `title`, 'Name 1' `name`, 'Date 1' `date` UNION ALL
22
+ * SELECT 'Title 2' `title`, 'Name 2' `name`, 'Date 2' `date`
23
+ * ) u
24
+ * ON `mytable`.`title` = u.`title`
25
+ * SET
26
+ * `mytable`.`title` = u.`title`,
27
+ * `mytable`.`name` = u.`name`,
28
+ * `mytable`.`date` = u.`date`
28
29
*/
You can’t perform that action at this time.
0 commit comments