SORU
25 Mart 2013, PAZARTESİ


Ve çok-Çok Doktrini 2 ekstra bir alan ile masa bağlantısı

(Tutarsız benim sorum için kusura bakmayın: bazı sorular bu yazı yazıyordum, ama burada:) cevap vermeye çalıştım

Ayrıca bağlantı başına bir değeri olan bir bağlantı tablo içinde çok-çok ilişki, ama bir veritabanı modeli, bu durumda stok tutma bir tablo oluşturmak için çalışıyorum. (bende daha fazla sorun için temel bir örnektir, ama sadece devam ediyorum, daha önce bu ile test edin) dedim.

Database model for a basic multi-store, multi-product store-keeping system

exportmwb Bu basit örneğin iki Varlık Mağaza ve Ürün üretmek için kullandım, her ikisi de aşağıda görüntülenir.

Ancak sorun şimdi stok erişmek için nasıl anlamaya olamaz.miktar değer (negatif olarak int imzalı) Doktrini kullanarak. Tablolar Doktrini orm kullanarak oluşturmaya çalışırken de,: şema aracı:işlev oluşturun

the database layout as it is seen from HeidiSQL

Bu vermiştir, yalnızca iki taraf ve üç tablo, bir tablo bağlantı olmadan değerleri ve iki veri tabloları, çok-çok ilişkiler değil mi kuruluşlar kendilerini tek bir Ürün ve Mağaza olarak bir varlık.

Bu yüzden, mantıken, veritabanı modelim ayrı bir tablo olarak stok var değişen mağaza ve ürün ilişkileri ile çalıştım. Ben de kullanılır sadece sorun kaynağı olarak o hariç edebilmek için yeniden yazdı:

changed database layout

Buldum ben hala Stok bir varlık... ve kendisi yoktu veritabanı alamadım ne 'miktar alanı'. sonra

Gerçekten bir seçenek kendisi değil ürün üzerindeki bu mağaza ve ürünler birlikte hisse senedi tablo (diğer şeyler arasında)... bu yüzden sadece stok ekleme bağlamak edebilmek için gerekli.

root@hdev:/var/www/test/library# php doctrine.php orm:info
Found 2 mapped entities:
[OK]   Entity\Product
[OK]   Entity\Store

Ve veritabanı oluşturduğumda, bu beni hala stok tablo alanlar vermez:

the database layout as it is seen from HeidiSQL

Yani, bazı şeyler ararken burada, çok-çok bağlantı varlıkları ve bu nedenle değerleri olmadığını öğrendim. İlişkileri ile ayrı bir tablo olarak değiştirmeyi Diğerleri denedim, ama yine de işe yaramadı.

Burada yanlış ne yapıyorum?

CEVAP
26 Mart 2013, Salı


Bir çok-Çok ilişki ile ek değerler değil bir çok-Çok, ama gerçekten yeni bir varlık, o zaman şimdi bir tanımlayıcı (iki ilişkiler bağlı kuruluşlar) ve değerleri.

Bu da çok-Çok dernek çok nadir nedeni budur: onları, sorting, amount, vb gibi ek özellikler saklamak eğilimindedir.

Muhtemelen ne gerek (her ikisi de çift yönlü ilişkiler, en az bir tanesi, tek yönlü yapmayı düşünün) yaptım aşağıdaki gibi bir şey:

Ürün:

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="product") @ORM\Entity() */
class Product
{
    /** @ORM\Id() @ORM\Column(type="integer") */
    protected $id;

    /** ORM\Column(name="product_name", type="string", length=50, nullable=false) */
    protected $name;

    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="product") */
    protected $stockProducts;
}

Mağaza:

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="store") @ORM\Entity() */
class Store
{
    /** @ORM\Id() @ORM\Column(type="integer") */
    protected $id;

    /** ORM\Column(name="store_name", type="string", length=50, nullable=false) */
    protected $name;

    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="store") */
    protected $stockProducts;
}

Stok:

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="stock") @ORM\Entity() */
class Stock
{
    /** ORM\Column(type="integer") */
    protected $amount;

    /** 
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Entity\Store", inversedBy="stockProducts") 
     * @ORM\JoinColumn(name="store_id", referencedColumnName="id", nullable=false) 
     */
    protected $store;

    /** 
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts") 
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=false) 
     */
    protected $product;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MuscleProdigyTV

    MuscleProdig

    8 Ocak 2011
  • SegaAmerica

    SegaAmerica

    5 Mart 2008
  • Theodore Leaf

    Theodore Lea

    29 AĞUSTOS 2006