首先感谢阅读。
我对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, '.', '');
}
}