【问题标题】:Symfony 4 Fixtures with Nelmio Alice not persisting带有 Nelmio Alice 的 Symfony 4 Fixtures 没有持续存在
【发布时间】:2018-06-22 04:12:13
【问题描述】:

我在 Symfony 4 中使用 Alice 的 Data Fixtures 遇到问题。

当我运行 bin/console dictionary:fixtures:load 时,系统会询问我是否要清除数据库,最终命令终止且没有任何错误。

数据库被有效清除,但没有填充数据。

我正在使用 Symfony 4.0.3、Doctrine Data Fixtures 1.3 和 Nelmio Alice 3.1.3。

src/DataFixtures/ORM/fixtures.yml

App\Entity\User:
user{1..10}:
    email: '<email()>'

src/DataFixtures/ORM/LoadFixtures.php

namespace App\DataFixtures\ORM;

use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Nelmio\Alice\Loader\NativeLoader;


class LoadFixtures extends Fixture
{
    public function load(ObjectManager $manager)
    {
        $loader = new NativeLoader();
        $objectSet = $loader->loadFile(__DIR__.'/fixtures.yml');

    }
}

src/Entity/User.php

namespace App\Entity;

use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="user")
 */
class User implements UserInterface
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    private $id;
    /**
     * @ORM\Column(type="string", unique=true)
     */
    private $email;

    ... and then various getters/setters methods

我怀疑问题出在 ObjectManager 中没有持久化数据。 不幸的是,Nelmio/Alice 的文档中没有任何关于如何保存数据的信息。 https://github.com/nelmio/alice#table-of-contents

如何确保数据得到持久化?

【问题讨论】:

    标签: symfony doctrine symfony4 nelmio-alice alice-fixtures


    【解决方案1】:
        class LoadFixtures extends Fixture
    {
        public function load(ObjectManager $manager)
        {
            $loader = new Nelmio\Alice\Loader\NativeLoader();
            $objectSet = $loader->loadFile(__DIR__.'/Fixtures.yml')->getObjects();
            foreach($objectSet as $object) {
                $manager->persist($object);
            }
            $manager->flush();
        }
    }
    

    Alice 自第 3 版以来发生了很大变化。

    【讨论】:

    • 太棒了,谢谢!我实际上已经尝试过持久化对象。但我没有在 objectSet 上调用 ->getObjects() 方法。
    • 我认为在以前的版本中,Alice 会为您保存对象,现在您必须手动完成,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2017-07-04
    • 2023-03-16
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多