php doctrine orm cant insert joinColumn null

时间:2015-12-20 00:51:08

标签: php orm doctrine-orm

首先感谢阅读。

我对Doctrine Orm有点新意。我的问题是我已经声明了一个具有两个oneToMany joinColumns的类,但即使我没有这些joinColumn数据,我也需要插入数据。

所以,我有一个包含三个可能值的变量," factura" | " nota credito" | " nota debito"。当" factura"选择然后我必须添加两个arrayCollection()来添加可能的数据。但是当" nota credito"或者" nota debito"选择我不必添加数组,但是当发生这种情况时...新的factura对象没有插入。

所以这是我的Librarie和modelCode的代码。请查看_construct和最后两个映射的joinColumns。

public function insertaFactura($information) {
        $cliente = $this->getCollectionByid("Cliente", $information['cob_cliente']);
        $factura = new Factura($information, $cliente);
        $this->orm->flush();
        $this->orm->persist($factura);
        if ($information['doc_tipo'] == "factura") {
            if ($information['articulos']) {
                foreach ($information['articulos'] as $key_venta => $articulos) {
                    foreach ($articulos as $articulo) {
                        $ventaArticulo = $this->getCollectionByid("Venta_Articulo", $articulo);
                        $fva = new Factura_Venta_Articulo();
                        $fva->setVentaArticulo($ventaArticulo);
                        $fva->setFactura($factura);
                        $this->orm->persist($fva);
                    }
                }
                $this->orm->flush();
            }
        }
        return $factura->getId();
    }

<?php

use \Doctrine\Common\Collections\ArrayCollection;

/**

 * Factura

 *

 * @Table(name="documento_cliente")

 * @Entity

 */
class Factura {

    /**

     * @var integer $id

     *

     * @Column(name="doc_id", type="integer", nullable=false)

     * @Id

     * @GeneratedValue(strategy="AUTO")

     */
    private $id;

    /**

     * @var string $numero

     *

     * @Column(name="doc_numero", type="string", length=120, nullable=true)

     */
    private $numero;

    /**

     * @var string $tipo

     *

     * @Column(name="doc_tipo", type="string")

     */
    private $tipo;

    /**

     * @var string $fecha

     *

     * @Column(name="doc_fecha", type="date", length=1, nullable=true)

     */
    private $fecha;

    /**

     * @var integer $estado

     *

     * @Column(name="doc_estado", type="integer", length=120, nullable=true)

     */
    private $estado;

    /**

     * @OneToOne(targetEntity="Cliente", cascade={"persist", "remove"}))

     * @JoinColumn(name="doc_cliente_id", referencedColumnName="cli_id")

     * */
    private $cliente;

    /**

     * @OneToMany(targetEntity="Factura_Venta_Articulo", mappedBy="factura")

     * @JoinColumn(name="fva_ver_id", referencedColumnName="ver_id",nullable=true)
     *  */
    private $venta_articulo;

    /**

     * @OneToMany(targetEntity="Cobro_factura", mappedBy="factura")

     * @JoinColumn(name="cof_id", referencedColumnName="cobro_id",nullable=true)
     *  */
    private $cobros;

    public function getId() {

        return $this->id;
    }

    public function getTipo() {

        return $this->tipo;
    }

    public function getNumero() {

        return $this->numero;
    }

    public function getFecha() {

        return $this->fecha;
    }

    public function getEstado() {

        return $this->estado;
    }

    public function getCliente() {
        return $this->cliente;
    }

    public function getVentasArticulo() {
        return $this->venta_articulo;
    }

    public function getCobros() {

        return $this->cobros;
    }

    public function setNumero($numero) {

        $this->numero = $numero;
    }

    public function setTipo($tipo) {

        $this->tipo = $tipo;
    }

    public function setFecha($fecha) {

        $this->fecha = $fecha;
    }

    public function setEstado($estado) {

        $this->estado = $estado;
    }

    public function setCliente($cliente) {

        $this->cliente = $cliente;
    }

    public function __construct($parameters, $cliente) {

        $this->setEstado(3);
        $this->setFecha(new \DateTime($parameters['factura_fecha']));
        $this->setNumero($parameters['factura_numero']);
        $this->setCliente($cliente);
        $this->setTipo($parameters['doc_tipo']);
        if ($parameters['doc_tipo'] == 'factura') {
            $this->venta_articulo = new ArrayCollection();
            $this->cobros = new ArrayCollection();
        }
    }

    public function actualizar($numero, $fecha, $cliente) {

        $this->setNumero($numero);

        $this->setFecha(new \DateTime($fecha));

        $this->setCliente($cliente);
    }

    public function totalFactura() {
        $total = 0.0;
        foreach ($this->venta_articulo as $ventaArticulo) {
            $total+=$ventaArticulo->getVentaArticulo()->getIngreso();
        }
        return $total;
    }

    public function totalFacturaCobrado() {
        $total = 0;
        foreach ($this->cobros as $cobro) {
            $total+=$cobro->getCobranza();
        }
        return number_format($total, 2, '.', '');
    }

    public function totalFacturaACobrar() {
        return number_format($this->totalFactura(), 2, '.', '') - number_format($this->totalFacturaCobrado(), 2, '.', '');
    }

}

0 个答案:

没有答案