I think the best approach is using factories. When I say factory I do not mean Factory pattern, but take inspiration from FactoryGirl gem from Ruby, widely used for testing. It defines rules to generate records required by tests.

So you could generate and insert only records that are required by tests. Unlike fixtures or SQL dumps, factories can insert records only required by a test, so you wouldn't get into data hell, where you are not sure which record from database are used by which test. Codeception has method haveInDatabase (haveRecord, etc) but its very simple, as it does not generate factory by rules.

But what we have in PHP? I saw Jeffrey way did something like that for Laravel, but unfortunately he is not maintained this repo anymore

There is also a project called Phactory, I didn't have a time, but it looks very promising. You could take a look at it. Maybe its really handy tool and can be used with Codeception