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.