Мне нужна функция, которая дала бы мне список таблиц и записей, созданных некоторым PHP-кодом. Эта функция будет выполняться из модульного теста.
Моя идея установить время с помощью углерода, выполнить некоторый PHP-код, а затем запустить эту функцию, которая получит список всех таблиц в базе данных и запустит выбор для каждой таблицы, ищущей конкретную дату при создании и обновлении -в полях ..
Затем он возвращает коллекцию записей, созданных в базе данных, сгруппированных по имени таблицы.
В качестве альтернативы, если бы я был счастлив получить список изменений, внесенных транзакцией базы данных.
Я не знаю, существует ли такая функция где-нибудь на уровне 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));
}
}