多重坚持 Symfony 3 Doctrine

Multiple persist in Symfony 3 Doctrine

我有一个包含 3 个表的数据库,Equipment、transaction 和 transactionReceive。未来会有多个transactionXYZ,每种交易一个。我使用了连接继承 link transactionReceive with transaction。我还在设备和交易之间使用多对一关联,因为一件设备可以有多个交易。

我目前正在努力添加一件设备。这是一个两步过程。这应该: 1:制作装备 2:创建transaction/transactionReceive

我的问题是,当我尝试设置 equipmentId 以保留事务时,它会抛出一个异常,提示它为空。

我的代码如下:

$em->persist($equipmentData);
$em->flush();

$trans = new TransactionReceive();
$trans->setEquipmentId($equipmentData->getId()); 
//Here I set all transactions info 

$em->persist($trans);
$em->flush();

谢谢

编辑: 显然我的问题与 ManyToOne 关联的插入有关。我注意到它是因为即使我在交易中硬编码 equipmentId 的值,我也会得到同样的错误。

编辑 2: 交易实体

namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
 * Transaction
 *
 * @ORM\Table(name="transaction")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\TransactionRepository")
 *
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="transactionType", type="string")
 * ORM\@DiscriminatorMap({
 *  "receive" = "TransactionReceive", 
 *  "changeout" = "TransactionChangeoutWheelset",
 * })
 */
class Transaction
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

/**
 * @var int
 * @ORM\ManyToOne(targetEntity="Equipment")
 * @ORM\Column(name="equipmentId", type="integer")
 */
private $equipmentId;

/**
 * @return int
 */
public function getequipmentId()
{
    return $this->equipmentId;
}
/**
 * @param int $equipmentId
 *
 * @return self
 */
public function setEquipmentId($equipmentId)
{
    $this->equipmentId= $equipmentId;
    return $this;
}
// Other attributes, getters and setters

交易接收实体

namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use AppBundle\Entity\Transaction;
/**
 * TransactionReceive
 *
 * @ORM\Table(name="transaction_receive")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\TransactionReceiveRepository")
 */
class TransactionReceive extends Transaction
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @var int
     *
     * @ORM\Column(name="gsThickness", type="integer")
     */
    private $gsThickness;

    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * Set gsThickness
     *
     * @param integer $gsThickness
     *
     * @return TransactionReceive
     */
    public function setGsThickness($gsThickness)
    {
        $this->gsThickness = $gsThickness;
        return $this;
    }
    /**
     * Get gsThickness
     *
     * @return int
     */
    public function getGsThickness()
    {
        return $this->gsThickness;
    }
}

由于你的equipementId属性是一个外键,你需要将它设置为一个对象设备,而不仅仅是它的Id。

将行 $trans->setEquipmentId($equipmentData->getId()); 替换为

$trans->setEquipmentId($equipmentData); 

应该能帮到你。