仅在sonata管理视图中加载ManyToMany属性

时间:2014-09-08 13:07:23

标签: php symfony doctrine-orm sonata-admin

我使用sonata admin来管理我的symfony应用程序中的实体。实体有很多属性,我想在奏鸣曲中管理它们。因此我将其添加到实体:

/**
 * @ORM\ManyToMany(targetEntity="Product", inversedBy="farmer", cascade={"persist"})
 * @ORM\JoinTable(name="farmerproduct",
 *     joinColumns={
 *     @ORM\JoinColumn(name="farmer_id", referencedColumnName="id")
 *   },
 *   inverseJoinColumns={
 *     @ORM\JoinColumn(name="product_id", referencedColumnName="id")
 *   }
 * )
 */
private $products;

现在的问题是,在我的应用程序中,我抓取了很多这些农民(实体),最终导致 PHP致命错误:允许的内存大小为134217728字节耗尽

原因是,我通过JSON将结果发送到Web应用程序。

如何仅在奏鸣曲管理员中使用产品?我已经在下一步中编写了一些延迟加载样式的产品。所以我不需要在我的网络应用程序中使用它。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您在为管理员和网络应用分享相同操作时遇到了问题吗?如果您在管理员和Web应用程序中有不同的逻辑,则可以为它们创建两个不同的服务器包。

答案 1 :(得分:0)

好的问题很容易解决

第一种方法是使用序列化程序的setIgnored方法:http://symfony.com/doc/current/components/serializer.html#ignoring-attributes-when-serializing

如果这不起作用(因为它对我不起作用),第二种方式是:

第二种方式:仅为管理创建新的实体对象,并在该实体中添加manytomany,在admin.yml中重新配置sonata admin配置以使用映射到数据库中原始实体的新实体。将您的旧实体用于webapp。