Study
Symfony

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().

Editor Latihan

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.