Kam*_*l P 1 doctrine fixtures symfony
在DoctrineFixturesBundle中,如果我想按指定的顺序执行fixtures,我必须在任何fixture类方法中创建如下:
public function getOrder()
{
return 2;
}
Run Code Online (Sandbox Code Playgroud)
指定订单并不舒服.
在Laravel Framework中,我可以这样做:
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call('PositionsSeeder');
$this->call('UsersSeeder');
$this->call('PostsSeeder');
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我可以在symfony中这样做吗?
我看到一个解决方案.我可以使用以下代码制作BaseFixture:
class LoadBrandData extends AbstractFixture
{
public function load(ObjectManager $manager)
{
(new LoadPositionsData())->load(manager);
(new LoadUsersData())->load(manager);
(new LoadPostsData())->load(manager);
}
}
Run Code Online (Sandbox Code Playgroud)
但也许我可以做得更好.我可以吗?
小智 8
您可以使用 Doctrine DependentFixtureInterface;请检查以下示例:
namespace MyDataFixtures;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
class MyFixture extends AbstractFixture implements DependentFixtureInterface
{
public function load(ObjectManager $manager)
{}
public function getDependencies()
{
return array('MyDataFixtures\MyOtherFixture'); // fixture classes fixture is dependent on
}
}
class MyOtherFixture extends AbstractFixture
{
public function load(ObjectManager $manager)
{}
}
Run Code Online (Sandbox Code Playgroud)
来源:https : //github.com/doctrine/data-fixtures
即使你不喜欢它,实现这一目标的最佳方法是通过该getOrder()方法.
话虽如此,您可以使用至少两个技巧以其他方式设置订单:
| 归档时间: |
|
| 查看次数: |
1493 次 |
| 最近记录: |