Функция тестирования Laravel для просмотра любых изменений в базе данных

Мне нужна функция, которая дала бы мне список таблиц и записей, созданных некоторым PHP-кодом. Эта функция будет выполняться из модульного теста.

Моя идея установить время с помощью углерода, выполнить некоторый PHP-код, а затем запустить эту функцию, которая получит список всех таблиц в базе данных и запустит выбор для каждой таблицы, ищущей конкретную дату при создании и обновлении -в полях ..

Затем он возвращает коллекцию записей, созданных в базе данных, сгруппированных по имени таблицы.

В качестве альтернативы, если бы я был счастлив получить список изменений, внесенных транзакцией базы данных.

Я не знаю, существует ли такая функция где-нибудь на уровне MySQL, может быть, в Laravel или PHPUnit.

Если его не существует, пожалуйста, помогите мне его написать. Спасибо.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
0
437
1

Ответы 1

Вот как я это решаю сейчас:

Функция

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));
    }


}

Другие вопросы по теме