Множество сохраняются в доктрине Symfony 3 - PullRequest
0 голосов
/ 28 июня 2018

У меня есть база данных с 3 таблицами, Оборудование, транзакция и транзакцияПолучить. В будущем будет несколько транзакций XYZ, по одной для каждого типа транзакции. Я использовал объединенное наследование для связи транзакции с транзакцией. Я также использую связь Много к одному между Оборудованием и транзакцией, поскольку единица оборудования может иметь несколько транзакций.

В настоящее время я работаю над добавлением оборудования. Это двухступенчатый процесс. Должно: 1: создать часть оборудования 2: Создать транзакцию / транзакциюПолучить

Моя проблема в том, что, когда я пытаюсь установить equipmentId для сохранения транзакции, он выдает исключение, сообщающее, что оно равно нулю.

Мой код выглядит следующим образом:

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

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

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

Спасибо

EDIT: По-видимому, моя проблема была бы связана со вставкой с ассоциацией ManyToOne. Я заметил это, потому что я получаю ту же ошибку, даже если я жестко кодирую значение для ID оборудования в транзакции.

РЕДАКТИРОВАТЬ 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

TransactionReceive сущность

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;
    }
}

1 Ответ

0 голосов
/ 29 июня 2018

Поскольку ваше equipementId свойство является внешним ключом, вам необходимо установить для него оборудование, а не только его идентификатор.

Замена строки $trans->setEquipmentId($equipmentData->getId()); на

$trans->setEquipmentId($equipmentData); 

должно помочь вам.

...