symfony - 如何限制 Doctrine2 中的 OneToMany/ManyToOne 关联深度/循环?

标签 symfony doctrine-orm doctrine associations model-associations

我有 3 个 Doctrine 实体。第一个是 User,第二个是 Product,第三个是 ProductUsers

因此,UserProductUsers 具有 OneToMany 关联,并且相同的 Product 具有 OneToMany 关联产品用户ProductUsersUserProduct 均具有 ManyToOne 关联。就像这样:

class Product
{
    /**
     * @var ProductUsers
     *
     * @ORM\OneToMany(targetEntity="ProductUsers", mappedBy="product")
     */
    private $productUsers;
}

class ProductUsers
{
    /**
     * @var Product
     *
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Product", inversedBy="productUsers")
     * @ORM\JoinColumn(name="product_ID", referencedColumnName="ID")
     */
    private $product;

    /**
     * @var User
     *
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="User", inversedBy="productUsers")
     * @ORM\JoinColumn(name="user_ID", referencedColumnName="ID")
     */
    private $user;

    // extra fields ...
}

class User
{
    /**
     * @var ProductUsers
     *
     * @ORM\OneToMany(targetEntity="ProductUsers", mappedBy="user")
     */
    private $productUsers;
}

一个用户可以使用多个产品,一个产品可以有多个用户。 ProductUsers 除了关系之外,还有一些有关该关系的额外信息。

问题是,当我获取一个 User 对象时,它会附带关联的 ProductUsers 及其关联的 Product。不仅如此,Product 还附带了所有相关的 ProductUsers 及其各自的 User 对象,这是相当大的开销。

This问题与我的问题密切相关。

我希望在 Doctrine 级别限制这一点,就像 JMSSerializerBundle MaxDepth 所做的那样。有没有办法限制这种 Doctrine 上的开销?

最佳答案

我很久以前就遇到过这个问题。我试过lazy loading 。这没有按预期工作,这也不是解决我的问题的正确方法。所以我做了一些研发并想出了一个我不需要 bidirectional 的解决方案关系来自ProductProductUsers .

我可以与 unidirectional 管理相同的关系仅处理 ProductUsers边。您将需要One-To-Many当您需要时关联cascade-persist或类似的功能。我写了一个small blog关于这一点也是如此。

因此,对于您的解决方案,只需 Many-To-One关联来自ProductUsers两者都有 ProductUser实体。您不需要对数据库关联进行任何更改。

当您需要为单个用户关联产品时,您可以随时保存 Querybuilder在存储库中,以便在需要关联数据时使用。

它将节省大量性能。希望对您有帮助!

关于symfony - 如何限制 Doctrine2 中的 OneToMany/ManyToOne 关联深度/循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38801062/

相关文章:

php - Swiftmailer 在 'cc' 为空时提示

php - Symfony/学说 : Why my integer Entity attribute is returning as string?

PHP 和 Doctrine : how to create unique IDs

php - 从 Doctrine2 获取值数组的正确方法

php - 使用 composer : "Vendor libraries must be installed" 后 Symfony 2.6 错误

mysql - UniqueEntity 验证失败 - Symfony?

php - Symfony:在 Doctrine Entity 方法中使用返回类型提示的表单问题

codeigniter - 将 Doctrine 与 codeigniter 一起使用

php - 遗留数据库的 Doctrine ,从多个表中获取字段

php - 使用表单数据填充 Doctrine 2 模型的简单方法?