From a9081dcfc843d42b2c8e03d073e8539abc59bfb3 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Tue, 14 Aug 2018 20:21:20 +0200 Subject: [PATCH] migration: 20180814172405_user_split_name.php --- .../20180814172405_user_split_name.php | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 app/migrations/20180814172405_user_split_name.php diff --git a/app/migrations/20180814172405_user_split_name.php b/app/migrations/20180814172405_user_split_name.php new file mode 100644 index 0000000..f903fd1 --- /dev/null +++ b/app/migrations/20180814172405_user_split_name.php @@ -0,0 +1,45 @@ +getAdapter()->beginTransaction(); + + // Rename "name" to "firstname" and add "lastname". + $this->table('user') + ->renameColumn('name', 'firstname') + ->addColumn('lastname','string', [ + 'length' => 128, + 'after' => 'firstname', + 'null' => true + ]) + ->save(); + + // Update row data, moving everything after first space to from lastname. + foreach($this->fetchAll("SELECT `id`,`firstname` FROM `user`") as $row) { + + $builder = $this->getQueryBuilder()->update('user') + ->where(['id' => $row['id']]); + + $firstname = $row['firstname']; + + // If we find a space. + $pos = strpos($firstname, ' '); + if ($pos !== false) { + // Set everything after the first space to lastname. + $builder->set('lastname', substr($firstname, $pos+1)); + + // Remove everything after first space from firstname. + $firstname = substr($firstname, 0, $pos); + } + + $builder->set('firstname', $firstname); + $builder->execute(); + } + $this->getAdapter()->commitTransaction(); + } +}