PHP code example of ricorocks-digital-agency / morpher
1. Go to this page and download the library: Download ricorocks-digital-agency/morpher library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ricorocks-digital-agency / morpher example snippets
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('name');
$table->addColumn('first_name')->nullable();
$table->addColumn('last_name')->nullable();
});
}
class SplitUserNames extends Morph
{
protected static $migration = SplitNamesOnUsersTable::class;
protected $newNames;
public function prepare()
{
// Get all of the names along with their ID
$names = DB::table('users')->select(['id', 'name'])->get();
// Set a class property with the mapped version of the names
$this->newNames = $names->map(function($data) {
$nameParts = $this->splitName($data->name);
return ['id' => $data->id, 'first_name' => $nameParts[0], 'last_name' => $nameParts[1]];
});
}
protected function splitName($name)
{
// ...return some splitting logic here
}
public function run()
{
// Now we run the database query based on our transformed data
DB::table('users')->upsert($this->newNames->toArray(), 'id');
}
}
use RicorocksDigitalAgency\Morpher\Support\TestsMorphs;
class UserMorphTest extends TestCase {
use TestsMorphs;
protected function setUp(): void
{
parent::setUp();
$this->supportMorphs();
}
}
use RicorocksDigitalAgency\Morpher\Facades\Morpher;
class UserMorphTest extends TestCase {
// ...After setup
public function test_it_translates_the_user_names_correctly() {
Morpher::test(UserMorph::class)
->beforeThisMigration(function($morph) {
/**
* We use the `beforeMigrating` hook to allow for "old"
* data creation. In our user names example, we'll
* create users with combined forename and surname.
*/
DB::table('users')->insert([['name' => 'Joe Bloggs'], ['name' => 'Luke Downing']]);
})
->before(function($morph) {
/**
* We use the `before` hook to perform any expectations
* after the migration has run but before the Morph
* has been executed.
*/
$this->assertCount(2, User::all());
})
->after(function($morph) {
/**
* We use the `after` hook to perform any expectations
* after the morph has finished running. For example,
* we would expect data to have been transformed.
*/
[$joe, $luke] = User::all();
$this->assertEquals("Joe", $joe->forename);
$this->assertEquals("Bloggs", $joe->surname);
$this->assertEquals("Luke", $luke->forename);
$this->assertEquals("Downing", $luke->surname);
});
}
}