(Maaf atas pertanyaan saya yang tidak koheren: Saya mencoba menjawab beberapa pertanyaan ketika saya menulis posting ini, tetapi ini dia :)
Saya mencoba membuat model database dengan hubungan banyak-ke-banyak di dalam tabel tautan, tetapi yang juga memiliki nilai per tautan, dalam hal ini tabel penyimpanan stok. (ini adalah contoh dasar untuk lebih banyak masalah yang saya alami, tetapi saya pikir saya hanya akan mengujinya dengan ini sebelum melanjutkan).
Saya telah menggunakan exportmwb untuk menghasilkan dua Entities Store dan Product untuk contoh sederhana ini, keduanya ditampilkan di bawah.
Namun, masalahnya sekarang adalah saya tidak tahu cara mengakses nilai stock.amount (ditandatangani int, karena bisa negatif) menggunakan Doctrine. Juga, ketika saya mencoba membuat tabel menggunakan doktrin orm: schema-tool: create function
Ini hanya menghasilkan dua Entitas dan tiga tabel, satu sebagai tabel tautan tanpa nilai dan dua tabel data, karena hubungan banyak-ke-banyak bukanlah entitas itu sendiri sehingga saya hanya dapat memiliki Produk dan Penyimpanan sebagai entitas.
Jadi, secara logika, saya mencoba mengubah model database saya agar memiliki stok sebagai tabel terpisah dengan hubungan ke toko dan produk. Saya juga menulis ulang nama bidang hanya untuk mengecualikannya sebagai sumber masalah:
Lalu apa yang saya temukan adalah bahwa saya masih belum mendapatkan entitas Saham ... dan database itu sendiri tidak memiliki kolom 'jumlah'.
Saya benar-benar perlu untuk dapat mengikat toko dan produk ini bersama-sama dalam tabel stok (antara lain) ... jadi menambahkan stok pada produk itu sendiri bukanlah suatu pilihan.
root@hdev:/var/www/test/library# php doctrine.php orm:info
Found 2 mapped entities:
[OK] Entity\Product
[OK] Entity\Store
Dan ketika saya membuat database, itu masih tidak memberi saya bidang yang tepat di tabel stok:
Jadi, melihat beberapa hal di sini, saya menemukan bahwa koneksi banyak-ke-banyak bukanlah entitas dan karenanya tidak dapat memiliki nilai. Jadi saya mencoba mengubahnya ke tabel terpisah dengan hubungan ke yang lain, tetapi tetap tidak berhasil.
Apa yang saya lakukan salah di sini?
sumber
Jawaban:
Asosiasi Many-To-Many dengan nilai tambahan bukanlah Many-To-Many, tapi merupakan entitas baru, karena sekarang memiliki sebuah identifier (dua relasi ke entitas yang terhubung) dan nilai.
Itu juga alasan mengapa Banyak-To-Banyak asosiasi sangat jarang: Anda cenderung untuk menyimpan sifat tambahan di dalamnya, seperti
sorting
,amount
, dllYang mungkin Anda butuhkan adalah sesuatu seperti berikut (Saya membuat kedua relasi dua arah, pertimbangkan untuk membuat setidaknya salah satunya searah):
Produk:
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; }
Toko:
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; }
Persediaan:
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; }
sumber
Doktrin menangani hubungan banyak-ke-banyak dengan baik.
Masalah yang Anda alami adalah Anda tidak memerlukan pengaitan ManyToMany sederhana, karena pengaitan tidak dapat memiliki data "ekstra".
Tabel tengah (stok) Anda, karena berisi lebih dari product_id dan store_id, membutuhkan entitasnya sendiri untuk memodelkan data tambahan itu.
Jadi Anda benar-benar menginginkan tiga kelas entitas:
dan dua asosiasi:
sumber
php app/console doctrine:mapping:import AppBundle yml
untuk mengimpor skema dari database. Saya ingin ini menghasilkan file yaml pemetaan ekstra ini. Apakah ada yang punya Ide?:(