gpt4 book ai didi

symfony - 你能在 symfony2 中选择性地加载设备吗

转载 作者:行者123 更新时间:2023-12-04 11:56:14 24 4
gpt4 key购买 nike

当我跑

console doctrine:fixtures:load --fixtures=src/App/PeopleBundle/DataFixtures/ORM

我不希望学说清除每个有实体的表。相反,我只想清除明确指定目录中的装置的表。

然而,似乎无论目标目录如何,symfony 都在寻找每个包中的每个实体,并清除与每个实体关联的每个表。

我如何指示 symfony2 忽略除我为其编写设备的特定表之外的所有表?

最佳答案

以正确的方式解决这个问题并不难。首先,是的,您使用 --append ,但是您会添加很多您不想要的额外内容。所以你需要在你的设备中执行一些基本的检查,看看你是否真的需要添加它们(如果它们已经在数据库中,你不需要)。

我将向您展示的示例是一个简单的示例:我有一个 locators包含列的表:idname .

namespace Application\Model\Fixtures;

use Doctrine\Common\DataFixtures\OrderedFixtureInterface,
Doctrine\Common\DataFixtures\FixtureInterface,
Doctrine\Common\Persistence\ObjectManager,
Application\Model\Entity\Locator;

/**
* Class LoadLocators
*
* Pre-populates the locators table
*
* @package Application\Model\Fixtures
*/
class LoadLocators implements FixtureInterface, OrderedFixtureInterface
{
/**
* @var array The locators names that will be inserted in the database table
*/
protected $locators = ['id', 'xpath', 'css'];

/**
* {@inheritDoc}
*/
public function load(ObjectManager $manager)
{
foreach ($this->locators as $locatorName)
{
$locator = $this->findOrCreateLocator($locatorName, $manager);

/** Check if the object is managed (so already exists in the database) **/
if (!$manager->contains($locator))
{
$manager->persist($locator);
}
}

$manager->flush();
}

/**
* Helper method to return an already existing Locator from the database, else create and return a new one
*
* @param string $name
* @param ObjectManager $manager
*
* @return Locator
*/
protected function findOrCreateLocator($name, ObjectManager $manager)
{
return $manager->getRepository('Application\Model\Entity\Locator')->findOneBy(['name' => $name]) ?: new Locator($name);
}

/**
* {@inheritDoc}
*/
public function getOrder()
{
return 1;
}
}

此处的简单更改是,如果该对象已存在于数据库中,则找到它并改用该对象。真的就是这么简单。

我现在运行的命令有 --append最后,但如果数据已经存在,则不会追加。

关于symfony - 你能在 symfony2 中选择性地加载设备吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11893028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com