Mysql Laravel测试函数以查看数据库中的任何更改

Mysql Laravel测试函数以查看数据库中的任何更改,mysql,laravel-5,phpunit,Mysql,Laravel 5,Phpunit,我需要一个函数,它会给我一个由一些php代码完成的表和记录列表。此函数将从单元测试中执行 我的想法是通过一个Carbon设置一个时间,执行一些php代码,然后运行这个函数,该函数将获得数据库中所有表的列表,并为每个表运行一个select,查找在created at和updated at字段的特定日期 然后返回在batabase中创建的按表名分组的记录集合 或者,如果我愿意得到数据库事务所做修改的列表 我不知道这种函数是否存在于MySQL级别,或者可能存在于Laravel或PHPUnit中 如果它

我需要一个函数,它会给我一个由一些php代码完成的表和记录列表。此函数将从单元测试中执行

我的想法是通过一个Carbon设置一个时间,执行一些php代码,然后运行这个函数,该函数将获得数据库中所有表的列表,并为每个表运行一个select,查找在created at和updated at字段的特定日期

然后返回在batabase中创建的按表名分组的记录集合

或者,如果我愿意得到数据库事务所做修改的列表

我不知道这种函数是否存在于MySQL级别,或者可能存在于Laravel或PHPUnit中


如果它不存在,请帮我写。谢谢。

我现在就是这样解决的:

功能

function databaseChanges(Carbon $dateTime): array
{
    $schema = config('database.connections.mysql.database');
    $tables = DB::select(
            "
                    SELECT `table_name`
                    FROM `information_schema`.`tables`
                    WHERE true
                        AND `table_type` = 'base table'
                        AND `table_schema`= ?
                "
            , [$schema]
    );
    $result = [];
    foreach ($tables as $table) {
        try {
            $records = DB::table($table->table_name)
                ->select('created_at', 'updated_at')
                ->where('created_at', $dateTime)
                ->orWhere('updated_at', $dateTime)
                ->get();
            if ($records->count() > 0) {
                $result[$table->table_name] = $records;
            }
        } catch (QueryException $ex) {
            //\Log::debug(get_class($ex));
        }
    }

    return $result;
}
class DataBaseTest extends TestCase
{

    use DatabaseTransactions;


    public function test_data_base_changes(): void
    {
        $now = Carbon::now();
        Carbon::setTestNow($now); // stop the time

        $user = factory(User::class)->create();

        $changes = databaseChanges($now);

        $this->assertSame(['accounts', 'users'], array_keys($changes));
    }


}
单元测试

function databaseChanges(Carbon $dateTime): array
{
    $schema = config('database.connections.mysql.database');
    $tables = DB::select(
            "
                    SELECT `table_name`
                    FROM `information_schema`.`tables`
                    WHERE true
                        AND `table_type` = 'base table'
                        AND `table_schema`= ?
                "
            , [$schema]
    );
    $result = [];
    foreach ($tables as $table) {
        try {
            $records = DB::table($table->table_name)
                ->select('created_at', 'updated_at')
                ->where('created_at', $dateTime)
                ->orWhere('updated_at', $dateTime)
                ->get();
            if ($records->count() > 0) {
                $result[$table->table_name] = $records;
            }
        } catch (QueryException $ex) {
            //\Log::debug(get_class($ex));
        }
    }

    return $result;
}
class DataBaseTest extends TestCase
{

    use DatabaseTransactions;


    public function test_data_base_changes(): void
    {
        $now = Carbon::now();
        Carbon::setTestNow($now); // stop the time

        $user = factory(User::class)->create();

        $changes = databaseChanges($now);

        $this->assertSame(['accounts', 'users'], array_keys($changes));
    }


}