1. Go to this page and download the library: Download kdabrow/time-machine 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/ */
kdabrow / time-machine example snippets
use Kdabrow\TimeMachine\TimeTraveller;
use App\Models\User;
// provide model instance
$traveller = new TimeTraveller(new User());
// or class name
$traveller = new TimeTraveller(User::class);
use Illuminate\Database\Eloquent\Builder;
use App\Models\User;
use App\Models\Group;
use Kdabrow\TimeMachine\TimeTraveller;
use Kdabrow\TimeMachine\Result;
use Illuminate\Support\Arr;
// Result contains all previously changed models from all TimeTravellers
// For example move Users only from previously changed Group
$traveller = new TimeTraveller(
User::class,
function(Builder $builder, Result $result) {
if ($result->isSuccessful(Group::class)) {
return $query->whereIn(
'group_id',
$result->getSuccessful(Group::class)->pluck('id')
);
}
}
);
use App\Models\User;
use Kdabrow\TimeMachine\TimeTraveller;
use Kdabrow\TimeMachine\Database\Column;
use Kdabrow\TimeMachine\Result;
use Illuminate\Database\Eloquent\Model;
$traveller = new TimeTraveller(User::class);
$traveller->alsoChange('date_of_creation');
// It's possible to provide callback and determine how given field should be changed
// Column object has information about currently modified column
// Model is selected instance of User
// Result contains previously moved in time data
// In this example only move if no errors appeared during previous time travels
$traveller->alsoChange(
'date_of_creation',
function($currentValue, Column $column, Model $model, Result $result) {
if (count($result->getAllFailed())) {
return $currentValue;
}
return null;
}
);
use App\Models\User;
use Kdabrow\TimeMachine\TimeTraveller;
$traveller = new TimeTraveller(User::class);
$traveller->exclude('date_of_birth');
use App\Models\User;
use Kdabrow\TimeMachine\TimeTraveller;
$traveller = new TimeTraveller(User::class);
$traveller->setKeys(['uuid']);
use Kdabrow\TimeMachine\TimeMachine;
$timeMachine = new TimeMachine();
// now add previously created TimeTravellers
$timeMachine->take($traveller1);
$timeMachine->take($traveller2);
$timeMachine->take($traveller3);
use Kdabrow\TimeMachine\DateChooser;
use Kdabrow\TimeMachine\Result;
use DateInterval;
// move by DateInterval
$chooser = new DateChooser(new DateInterval("P1D")); // Move by 1 day
// or move by some specific amount of seconds
$chooser = new DateChooser(3600); // Move by 1 hour
// Now set up direction and start travel
/** @var Result $result */
$result = $timeMachine
->toPast($chooser)
->start();
use Kdabrow\TimeMachine\DateChooser;
use Kdabrow\TimeMachine\Result;
use DateInterval;
// move by DateInterval
$chooser = new DateChooser(new DateInterval("P1D")); // Move by 1 day
// or move by some specific amount of seconds
$chooser = new DateChooser(3600); // Move by 1 hour
// Now set up direction and start travel
/** @var Result $result */
$result = $timeMachine
->toFuture($chooser)
->start();
use Kdabrow\TimeMachine\DateChooser;
use Kdabrow\TimeMachine\Result;
use DateTime;
// put DateTimeInterface object
$chooser = new DateChooser(new DateTime("2020-15-16 12:12:12")); // Move datetime columns to 2020-15-16 12:12:12
// or provide datetime string
$chooser = new DateChooser("2020-15-16 12:12:12"); // Move to 2020-15-16 12:12:12
// Now set up direction and start travel
/** @var Result $result */
$result = $timeMachine
->toDate($chooser)
->start();
use Kdabrow\TimeMachine\TimeTraveller;
use Kdabrow\TimeMachine\Result;
use Kdabrow\TimeMachine\TimeMachine;
use App\Models\Customer;
use App\Models\Payment;
use App\Models\Order;
use Illuminate\Support\Arr;
$customerId = 100;
$customerTraveller = new TimeTraveller(
Customer::class,
function(Builder $builder, Result $result) use ($customerId) {
return $builder->where('id', '=', $customerId);
}
);
$customerTraveller->exclude('date_of_birth');
$paymentTraveller = new TimeTraveller(
Payment::class,
function(Builder $builder, Result $result) use ($customerId) {
if ($result->isSuccessful(Customer::class)) {
return $builder->whereIn(
'customer_id', $result->getSuccessful(Customer::class)->pluck('id')
);
}
}
);
$orderTraveller = new TimeTraveller(
Order::class,
function(Builder $builder, Result $result) use ($customerId) {
if ($result->isSuccessful(Payment::class)) {
return $builder->whereIn(
'payment_id', $result->getSuccessful(Payment::class)->pluck('id')
);
}
}
);
$timeMachine = new TimeMachine();
$result = $timeMachine
->take($customerTraveller)
->take($paymentTraveller)
->take($orderTraveller)
->toPast(new DateInterval("P10D"))
->start();
// Get instances that failed time travel
$failed = $result->getAllFailed();
$sucessful = $result->getAllSuccessful();
shell
docker-compose exec php vendor/bin/phpunit
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.