Witam.
Nie za bardzo wiem, w jaki sposob w modelu uwzglednic dodatkowe pola dla tabeli laczacej produkty i zamowienia.
Ponizej uproszczona struktura bazy danych:
[text]
tabela orders
id
user_id
payment_id
shipment_id
status
total_amount
tabela products
id
sku
name
price
description
tabela product_orders
products_id
orders_id
(chcialbym dodac dodatkowe pola: quantity, price)
[/text]
Fragment Orders.php (Entity)
class Orders
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @Assert\NotBlank
* @ORM\ManyToOne(targetEntity="Ml\UserBundle\Entity\User", inversedBy="orders")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
*
*/
protected $user;
/**
* @Assert\NotBlank
* @ORM\ManyToOne(targetEntity="Payments", inversedBy="orders")
* @ORM\JoinColumn(name="order_payment_id", referencedColumnName="id", nullable=false)
*
*/
protected $orderPayment;
/**
* @Assert\NotBlank
* @ORM\ManyToOne(targetEntity="Shipments", inversedBy="orders")
* @ORM\JoinColumn(name="order_shipment_id", referencedColumnName="id", nullable=false)
*
*/
protected $orderShipment;
/**
* @var string
*
* @ORM\Column(name="shipping_address", type="string", length=255, nullable=true)
*/
private $shippingAddress;
/**
* @var string
*
* @ORM\Column(name="billing_address", type="string", length=255, nullable=true)
*/
private $billingAddress;
/**
* @var string
*
* @ORM\Column(name="client_description", type="text", nullable=true)
*/
private $clientDescription;
/**
* @var string
*
* @ORM\Column(name="admin_description_for_client", type="text", nullable=true)
*/
private $adminDescriptionForClient;
/**
* @var string
*
* @ORM\Column(name="admin_description", type="text", nullable=true)
*/
private $adminDescription;
/**
* @var string
*
* @ORM\Column(name="total_amount", type="decimal", precision=11, scale=2)
*/
private $totalAmount;
//opt_client_name varchar(64)
//opt_client_company varchar(64)
/**
* @var datetime $created
*
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="datetime")
*/
private $created;
/**
* @var datetime $updated
*
* @Gedmo\Timestampable(on="update")
* @ORM\Column(type="datetime")
*/
private $updated;
/**
* @var string
*
* @ORM\Column(name="hash_code", type="string", length=255, nullable=true)
*/
private $hashCode;
/**
* @var boolean
*
* @ORM\Column(name="is_confirmed", type="boolean", options={"default":0})
*/
private $isConfirmed;
/**
* @var boolean
*
* @ORM\Column(name="is_payed", type="boolean", options={"default":0})
*/
private $isPayed;
/**
* @Assert\NotBlank
* @ORM\ManyToOne(targetEntity="OrdersStatus", inversedBy="orders")
* @ORM\JoinColumn(name="order_status_id", referencedColumnName="id", nullable=false)
*
*/
protected $orderStatus;
/**
* @var boolean
*
* @ORM\Column(name="pf_status", type="boolean", options={"default":0})
*/
private $pfStatus;
/**
* @var boolean
*
* @ORM\Column(name="f_status", type="boolean", options={"default":0})
*/
private $fStatus;
/**
* @ORM\ManyToMany(targetEntity="Products", mappedBy="orders")
*/
protected $products;
/**
* Constructor
*/
public function __construct()
{
$this->products = new \Doctrine\Common\Collections\ArrayCollection();
}
Fragment Products.php (Entity):
class Products
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="sku", type="string", length=255)
*/
private $sku;
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var string $slug
*
* @Gedmo\Slug(fields={"name"})
* @ORM\Column(length=255, unique=true)
*/
private $slug;
/**
* @var string
*
* @ORM\Column(name="vat_value", type="decimal", precision=3, scale=2, options={"default":0.23})
*/
private $vatValue;
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="price_netto", type="decimal", precision=7, scale=2, options={"default":0.00})
*/
private $priceNetto;
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="price_brutto", type="decimal", precision=7, scale=2, options={"default":0.00})
*/
private $priceBrutto;
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="old_price_netto", type="decimal", precision=7, scale=2, options={"default":0.00})
*/
private $oldPriceNetto;
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="old_price_brutto", type="decimal", precision=7, scale=2, options={"default":0.00})
*/
private $oldPriceBrutto;
/**
* @var boolean
*
* @ORM\Column(name="is_active", type="boolean", options={"default":1})
*/
private $isActive;
/**
* @var boolean
*
* @ORM\Column(name="is_new", type="boolean", options={"default":0})
*/
private $isNew;
/**
* @var boolean
*
* @ORM\Column(name="is_promo", type="boolean", options={"default":0})
*/
private $isPromo;
/**
* @var boolean
*
* @ORM\Column(name="is_popular", type="boolean", options={"default":0})
*/
private $isPopular;
/**
* @var datetime $created
*
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="datetime")
*/
private $created;
/**
* @var datetime $updated
*
* @Gedmo\Timestampable(on="update")
* @ORM\Column(type="datetime")
*/
private $updated;
/**
* @var integer
*
* @ORM\Column(name="views", type="integer", nullable=true, options={"default":0})
*/
private $views;
/**
* @var string
*
* @ORM\Column(name="short_description", type="string", length=255, nullable=true)
*/
private $shortDescription;
/**
* @var string
*
* @ORM\Column(name="description", type="text", nullable=true)
*/
private $description;
/**
* @var boolean
*
* @ORM\Column(name="hide_price", type="boolean", options={"default":0})
*/
private $hidePrice;
/**
* @Assert\NotBlank
* @ORM\ManyToOne(targetEntity="Availability", inversedBy="products")
* @ORM\JoinColumn(name="availability_id", referencedColumnName="id", nullable=false)
*
*/
protected $availability;
/**
* @var string
*
* @ORM\Column(name="meta_title", type="string", length=255, nullable=true)
*/
private $metaTitle;
/**
* @var string
*
* @ORM\Column(name="meta_keywords", type="string", length=255, nullable=true)
*/
private $metaKeywords;
/**
* @var string
*
* @ORM\Column(name="meta_description", type="text", nullable=true)
*/
private $metaDescription;
/**
* @Assert\NotBlank
* @ORM\ManyToOne(targetEntity="Brands", inversedBy="products")
* @ORM\JoinColumn(name="brand_id", referencedColumnName="id", nullable=false)
*
*/
protected $brands;
/**
* @ORM\OneToMany(targetEntity="Images", mappedBy="products", cascade={"persist"})
*/
protected $images;
/**
* @ORM\OneToMany(targetEntity="Documents", mappedBy="products", cascade={"persist"})
*/
protected $documents;
/**
* @ORM\OneToMany(targetEntity="Attributes", mappedBy="products", cascade={"persist"})
*/
protected $attributes;
/**
* @ORM\ManyToMany(targetEntity="Categories", inversedBy="products")
*/
protected $categories;
/**
* @ORM\ManyToMany(targetEntity="Orders", inversedBy="products")
*/
protected $orders;
public function __toString() {
return $this->name;
}
/**
* Constructor
*/
public function __construct()
{
$this->images = new \Doctrine\Common\Collections\ArrayCollection();
$this->documents = new \Doctrine\Common\Collections\ArrayCollection();
$this->attributes = new \Doctrine\Common\Collections\ArrayCollection();
$this->categories = new \Doctrine\Common\Collections\ArrayCollection();
$this->orders = new \Doctrine\Common\Collections\ArrayCollection();
}
W jaki sposob moge zaktualizowac model, aby miec mozliwosc zarzadzania dodatkowymi polami (quantity, price) z tabeli products_orders?
Nie znam zbyt dobrze SF2, dlatgo prosze o wyrozumialosc.