Doctrineでオブジェクト全体を取得せずにエンティティ関係からIDのみを取得する質問する

Doctrineでオブジェクト全体を取得せずにエンティティ関係からIDのみを取得する質問する

親子関係をマッピングするために自分自身を参照するエンティティがあると仮定します

class Food
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Food", inversedBy="foodChildren")
     * @ORM\JoinColumn(name="food_group_id", nullable=true)
     */
    protected $foodGroup;

    /**
     * @ORM\OneToMany(targetEntity="Food", mappedBy="foodGroup", fetch="LAZY", cascade={"remove"})
     */
    protected $foodChildren;

food_group_idデータベースから完全な親オブジェクトを取得せずにエンティティを取得したいというユースケースがあります。 を使用してもfetch="LAZY"、Doctrine が再度クエリを実行するのを防ぐことはできません。取得時に ID のみを返す方法はありますか$food->getFoodGroup()?

ベストアンサー1

人生を複雑にしないで、ただ

$food->getFoodGroup()->getId()

これしない追加のクエリを実行するか、遅延ロードをトリガーしてください。

これは、 が自身の ID を認識しているプロキシ オブジェクトであるためです$food->foodGroup。ロードされていないフィールドの getter メソッドを呼び出す場合にのみ、遅延ロードが実行されます。

おすすめ記事