【问题标题】:The association fixtures symfony协会固定装置 symfony
【发布时间】:2018-04-18 18:06:44
【问题描述】:

我正在尝试做一个 symfony 项目。我创建了我的文件装置 我想为我的桌子添加一个键 让club.$key 发送到我的数据库并创建几个俱乐部

class ClubFixtures extends Fixture implements OrderedFixtureInterface
{

public function load(ObjectManager $manager)
{

    $this->loadClubs($manager);

}

/**
 * @param ObjectManager $manager
 * @throws BadMethodCallException
 */
private function loadClubs(ObjectManager $manager)
{

    foreach ($this->getClubData() as [ $establishmentName, $address, $code]) {
        $club = new Club();
        $club->setEstablishmentName($establishmentName);
        $club->setAddress($address);
        $club->setCode($code);
        $club->addUsers($this->getReference('user1'));
        $club->addGames($this->getReference('game1'));
        $manager->persist($club);
        $manager->flush();
        $this->addReference('club1', $club);

    }
}

private function getClubData(): array
{
    return [
        // $clubData = [$establishmentName, $address, $code, $user, $games];
        ['establishmentName1', '60 rue de belleville', 342],
        ['establishmentName2', '65 rue de jaures', 543],
        ['establishmentName3', '80 rue de stalingrad', 987]
    ];
}


/**
 * Get the order of this fixture
 *
 * @return integer
 */
public function getOrder()
{
    return 1;
}

我是这个领域的初学者。

【问题讨论】:

  • 那么,什么是问题?)
  • 我想在我的数组中添加一个键,比如 $key 来制作 $this-> addReference ('club'.$key, $club);
  • 如果我有一个值 ds 表我可以这样做: foreach ($this->getClubData() as $key =>[ $establishmentName, $address, $code]) { $club =新俱乐部(); $club->setEstablishmentName($机构名称); $club->setAddress($address); $club->setCode($code); $club->addUsers($this->getReference('user1')); $club->addGames($this->getReference('game1')); $manager->persist($club); $manager->flush(); $this->addReference('club'.$key, $club); } }
  • 请不要将问题中应该出现的代码和解释放在 cmets 中。 edit 更新详细信息的问题。另外,请阅读How to Ask。我们需要知道您想做什么、尝试过什么以及获得了什么结果。
  • 那么,问题出在哪里?

标签: php symfony fixtures


【解决方案1】:

您使用foreach function 时出错。

所以,你的代码应该是这样的:

foreach ($this->getClubData() as $key => list($establishmentName, $address, $code)) {
    $club = new Club();
    $club->setEstablishmentName($establishmentName);
    $club->setAddress($address);
    $club->setCode($code);
    $club->addUsers($this->getReference('user1'));
    $club->addGames($this->getReference('game1'));
    $manager->persist($club);
    $manager->flush();
    $this->addReference('club'.$key, $club);
}

另外,检查your logs 非常有用。这样您可以更快地找到原因并修复它,或者只是在这里复制它。

【讨论】:

    【解决方案2】:

    我找到了想要获得灵感的解决方案: 用户俱乐部协会

    类 UserFixtures 扩展了 Fixture 实现 OrderedFixtureInterface {

    private $passwordEncoder;
    
    
    public function __construct(UserPasswordEncoderInterface $passwordEncoder)
    {
        $this->passwordEncoder = $passwordEncoder;
    
    }
    
    public function load(ObjectManager $manager)
    {
        $this->loadUsers($manager);
    }
    
    /**
     * @param ObjectManager $manager
     * @throws \Doctrine\Common\DataFixtures\BadMethodCallException
     */
    private function loadUsers(ObjectManager $manager)
    {
    
        foreach ($this->getUserData() as $key => [$name, $username, $email, $birthdate, $password, $address, $userCode,
                 $roles, $token, $service, $picture, $pictureName, $status]) {
            $user = new User();
            $user->setName($name);
            $user->setUsername($username);
            $user->setEmail($email);
            $user->setBirthdate($birthdate);
            $user->setPassword($this->passwordEncoder->encodePassword($user, $password));
            $user->setAddress($address);
            $user->setUserCode($userCode);
            $user->setRoles($roles);
            $user->setToken($token);
            $user->setService($service);
            $user->setPicture($picture);
            $user->setPictureName($pictureName);
            $user->setStatus($status);
            $user->setClub($this->getReference('club1'));
            $manager->persist($user);
            $this->addReference('user' . $key, $user);
    
    
        }
        $manager->flush();
    
    }
    
    private function getUserData(): array
    {
    
        return [
            ['Jane Doe', 'jane_admin', 'jane_admin@symfony.com', new \DateTime('2008-10-12'), 'test', '45 rue de tourtille', 139879, 'ROLE_ADMIN', 'jdijididi43gf', 'admin', 'image1', 'mon profil', 1],
            ['Tom Doe', 'tom_admin', 'tom_admin@symfony.com', new \DateTime('2009-10-11 '), 'test', '46 rue de tourtille', 135879, 'ROLE_SUPER_ADMIN', 'di43gfjdijididi', 'super_admin', 'image2', 'profil', 1],
            ['John Doe', 'john_user', 'john_user@symfony.com', new \DateTime('2010-09-10 '), 'test', '43 rue de tourtille', 139797, 'ROLE_USER', 'jdijidikaoli43gf', 'marketing', 'image3', 'ma phot', 1]
        ];
    }
    
    /**
     * Get the order of this fixture
     *
     * @return integer
     */
    public function getOrder()
    {
        return 2;
    }
    

    类 ClubFixtures 扩展了 Fixture 实现 OrderedFixtureInterface {

    public function load(ObjectManager $manager)
    {
    
        $this->loadClubs($manager);
    
    }
    
    /**
     * @param ObjectManager $manager
     * @throws BadMethodCallException
     */
    private function loadClubs(ObjectManager $manager)
    {
    
        foreach ($this->getClubData() as $key => [$establishmentName, $address, $code]) {
            $club = new Club();
            $club->setEstablishmentName($establishmentName);
            $club->setAddress($address);
            $club->setCode($code);
            $manager->persist($club);
            $this->addReference('club'.$key, $club);
    
    
        }
        $manager->flush();
    }
    
    private function getClubData(): array
    {
        return [
            // $clubData = [$establishmentName, $address, $code];
            ['establishmentName1', '60 rue de belleville', 342],
            ['establishmentName2', '65 rue de jaures', 543],
            ['establishmentName3', '80 rue de stalingrad', 987]
        ];
    }
    
    
    /**
     * Get the order of this fixture
     *
     * @return integer
     */
    public function getOrder()
    {
        return 1;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 1970-01-01
      • 2019-10-31
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      相关资源
      最近更新 更多