Doctrine Relationship
Penjelasan
Doctrine mendefinisikan relasi lewat attribute di properti Entity: #[ORM\OneToMany] (satu record punya banyak record terkait) dipasangkan dengan #[ORM\ManyToOne] (kebalikannya) di Entity sisi lain. Kedua sisi relasi WAJIB didefinisikan bersamaan supaya Doctrine tahu relasinya dua arah.
Contoh Konsep
<?php
#[ORM\Entity]
class Kategori
{
#[ORM\OneToMany(mappedBy: 'kategori', targetEntity: Produk::class)]
private Collection $produk;
public function __construct()
{
$this->produk = new ArrayCollection();
}
}
#[ORM\Entity]
class Produk
{
#[ORM\ManyToOne(targetEntity: Kategori::class, inversedBy: 'produk')]
private ?Kategori $kategori = null;
public function getKategori(): ?Kategori
{
return $this->kategori;
}
}
// Pemakaian:
foreach ($kategori->getProduk() as $item) {
echo $item->getNama();
}
Praktikum
Buat relasi: Entity Penulis punya #[ORM\OneToMany] ke Artikel (properti $artikel, Collection), dan Entity Artikel punya #[ORM\ManyToOne] ke Penulis (properti $penulis). Tulis contoh pemakaian yang menampilkan nama penulis dari satu artikel lewat getPenulis().
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
mappedBy dan inversedBy HARUS saling merujuk nama properti yang benar di sisi lawannya — mappedBy: 'kategori' di Kategori berarti "cari properti bernama $kategori di Entity Produk", kesalahan penulisan nama di sini adalah sumber error paling umum saat belajar relasi Doctrine.