1

私は Symfony2 2.3 を使用しており、DotrineFixturesBundle を介して 2 つのエンティティ間でデータを共有する必要がありますが、Fixtures 間の共有オブジェクトは機能しません。コマンドを実行すると php app/console doctrine:fixtures:load --purge-with-truncate データが読み込まれます. しかし関係のあるフィールドは NULL です.

表 Divterrigral

ID 説明

1 件の説明

FK Divterribase を含むテーブル

ID DIVTERRIGRAL_ID 説明

1 null descriptionInfo

mysql を実行すると、関係の動作をマッピングできます。

クラス LoadDivterrigral。

<?php
namespace Soint\InventarioBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Soint\InventarioBundle\Entity\Divterrigral;

class LoadDivterrigral extends AbstractFixture implements OrderedFixtureInterface{

    /**
     * {@inheritDoc}
     */
    public function load(ObjectManager $manager){
        $ahuachapan = new Divterrigral();
        $ahuachapan->setNombre('Ahuachapan');
        $manager->persist($ahuachapan);
        $manager->flush();

        $this->addReference('dep-ahuachapan', $ahuachapan);
    }

    /**
     * {@inheritDoc}
     */
    public function getOrder(){
        return 1; // el orden en el cual serán cargados los accesorios
    }

}

クラス LoadDivTerribase

<?php
namespace Soint\InventarioBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Soint\InventarioBundle\Entity\Divterribase;

class LoadDivterribase extends AbstractFixture implements OrderedFixtureInterface {
    /**
     * {@inheritDoc}
     */
    public function load(ObjectManager $manager){

        $ahuachapan = new Divterribase();
        $ahuachapan->setNombre('Ahuachapan');        
        $ahuachapan->setDivterrigral($this->getReference('dep-ahuachapan'));
        $manager->persist($ahuachapan);
        $manager->flush();
    }

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

エンティティDivterrigral

<?php 
namespace Soint\InventarioBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Soint\InventarioBundle\Entity\Divterribase;

/**
 * @ORM\Entity
 */
class Divterrigral {  
    /**
     * @ORM\Id 
     * @ORM\Column(type="integer") 
     * @ORM\GeneratedValue;
     */ 
    protected $id;

    /** @ORM\Column(type="string", length=100) */
    protected $nombre;

     /**
     * @ORM\OneToMany(targetEntity="Divterribase", mappedBy="divterrigral")
     */
    protected $divterribases;

    public function __construct() {
        $this->divterribases = new ArrayCollection();
    }

    public function addDivterribases(Articulo $articulos){        
        $this->divterribases[] = $articulos;
    }

    public function getDivterribases(){
        return $this->divterribases;
    }    

    /**
     * Get id
     * @return integer 
     */
    public function getId(){
        return $this->id;
    }

    /**
     * Set nombre
     * @param string $nombre
     * @return Divterrigral
     */
    public function setNombre($nombre){
        $this->nombre = $nombre;
        return $this;
    }

    /**
     * Get nombre
     * @return string 
     */
    public function getNombre(){
        return $this->nombre;
    }

    public function __toString(){
       return $this->getNombre();
    }
}

エンティティ Divterribase

<?php 
namespace Soint\InventarioBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Soint\InventarioBundle\Entity\Divterrigral;
/**
 * @ORM\Entity
 */  
class Divterribase {  
    /**
     * @ORM\Id 
     *  @ORM\Column(type="integer") 
     *  @ORM\GeneratedValue;
     */ 
    protected $id;

    /** @ORM\Column(type="string", length=100) */
    protected $nombre;

    /** 
     * @ORM\ManyToOne(targetEntity="Divterrigral", inversedBy="divterribases") 
     * @ORM\JoinColumn(name="divterrigral_id", referencedColumnName="id")
     * @return integer
     */
    protected $divterrigral;

    /**
     * Get id
     * @return integer 
     */
    public function getId(){
        return $this->id;
    }

    /**
     * Set nombre
     * @param string $nombre
     * @return Divterribase
     */
    public function setNombre($nombre){
        $this->nombre = $nombre;
        return $this;
    }

    /**
     * Get nombre
     * @return string 
     */
    public function getNombre(){
        return $this->nombre;
    }

    /**
     * Set divTerriGral
     * @param Soint\InventarioBundle\Entity\Divterrigral $divTerriGral
     * @return Divterribase
     */
    public function setDivterrigral(Divterrigral $divTerriGral = null){
        $this->divTerriGral = $divTerriGral;
        return $this;
    }

    /**
     * Get divTerriGral
     * @return   Soint\InventarioBundle\Entity\Divterrigral 
     */
    public function getDivterrigral(){
        return $this->divTerriGral;
    }

    public function __toString(){
       return $this->getNombre();
    }
}
4

1 に答える 1

0

エンティティDivterrigral

/**
 * @ORM\OneToMany(targetEntity="Divterribase", mappedBy="divterrigral",cascade={"persist", "remove"})
 */
protected $divterribases;

さらに読む: http://doctrine-orm.readthedocs.org/en/2.0.x/reference/working-with-associations.html#transitive-persistence-cascade-operations

于 2013-07-24T00:03:39.460 に答える