【问题标题】:Fixtures many to one symfony固定多对一的 symfony
【发布时间】:2021-07-03 16:32:31
【问题描述】:

尽管我进行了所有研究,但我无法通过多对一关系实现我的固定装置

我想将我的固定装置分开,因为我在很多情况下都需要它们。这是好的做法吗?

类区域

Entity Territory
{
    private $id;
    private $department; 
}

班级用户

Entity User
{
    private $id;
    private $name; 
    
    @ORM\ManyToOne(targetEntity="App\Entity\Territory")
    private $territory_id
}

TerritoryFixtures

class TerritoryFixtures extends Fixture
{

    public const TERRITORIES = 'territories';
    //public $territories = [];

        $datas = [
            [1, 'AAA'],
            [5, 'BBB'],
            [8, 'CCC'],
        ];


        foreach ($datas as $k => $data) {
            $territory[$k] = new Territory();
            $territory[$k]->setId($datas[$k][0]) // i need
                ->setDepartment($datas[$k][1]);

            $manager->persist($territoire[$k]);

            $this->addReference(self::TERRITORIES, $territory[$k]);  // only the last datas
            // $this->addReference($this->territories, $territory[$k]);
        }
        $manager->flush();
}

用户夹具

class UserFixtures extends Fixture implements DependentFixtureInterface
{
    public function getDependencies()
    {
        return [
            TerritoryFixtures::class
        ];
    }

    public function load(ObjectManager $manager)
    {
        $territories = $this->getReference(TerritoryFixtures::TERRITORIES);
        // **step 1: how to recover all my territories**

        $faker = Factory::create();

        for ($a = 0; $a < 10; $a++) {

            $user = new User();

            // **step 2 : how to insert a territory entity randomly**
            $user->setDepartement($faker->randomElement($territories))
                ->setName($faker->lastName());

}

总结:

  1. 生成区域对象

  2. 将此“Territory”对象提供给 UserFixtures

  3. 向用户随机插入一个区域

有可能吗?尽管我尝试了所有尝试,但我还是阻止了

【问题讨论】:

  • 是的,这看起来不错。 究竟是什么不起作用?你有什么努力让它发挥作用?

标签: php symfony doctrine fixtures many-to-one


【解决方案1】:
//public $territories = [];

应该是

$territory = [];

$manager->persist($territoire[$k]);

应该是

$manager->persist($territory[$k]);

根据您的其余代码。

如果这不能解决您的问题,您必须告诉我们您遇到了什么错误以及您尝试解决的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多