相关疑难解决方法(0)

延迟加载与doctrine一对一映射

我很难找到正确的结果.

我有一对一的映射.有两个表:

/**
* @ORM\Table(name="users")
* @ORM\Entity
*/
class Users {

   /**
    * @ORM\OneToOne(targetEntity="UsersSettings", mappedBy="user",cascade={"persist"})
   */
   private $userSetting;

   //getters and setters
}

/**
* @ORM\Table(name="notifications_settings")
* @ORM\Entity
*/
class UsersSettings {

   /**
   * @var Users
   *
   * @ORM\OneToOne(targetEntity="Users", inversedBy="userSetting")
   * @ORM\JoinColumns({
   *   @ORM\JoinColumn(name="user_id", referencedColumnName="id")
   * })
   */
   private $user;
}
Run Code Online (Sandbox Code Playgroud)

每当我获取实体一如下:

$q = $this
            ->createQueryBuilder('u')
            ->select('u, r')
            ->leftJoin('u.roles', 'r')
            ->where('u.username = :username OR u.email = :email')
            ->setParameter('username', $username)
            ->setParameter('email', $username)
            ->getQuery();
Run Code Online (Sandbox Code Playgroud)

Doctrine立即执行到我不想要的usersSettings实体的连接:

SELECT t0.id AS id1,t0.username AS username2,t0.email AS email3,t0.password …

symfony doctrine-orm

17
推荐指数
3
解决办法
2万
查看次数

如何防止Doctrine延迟加载一对一的关系?

编辑:如果您遇到类似问题,您将对此主题感兴趣

我有User和UserSettings具有一对一的双向关系.看来即使我没有在我的页面中使用任何UserSettings值,学说懒惰也会加载它.

这是预期的行为吗?为什么Doctrine获取这些数据,即使我没有在我的页面中使用它?如果我无法阻止它,我每次检索用户对象时都必须将此UserSettings加入User,但这是不必要的.

我该怎么做才能防止这种情况发生?

加载数据的代码:

->createQuery('SELECT p, u, s FROM TestPostBundle:Post p LEFT JOIN p.user u LEFT JOIN p.sub s WHERE p.id IN (:ids)')
->setParameter('ids', $ids)
->getResult();
Run Code Online (Sandbox Code Playgroud)

在twig我循环通过帖子并显示Post数据和相关用户,但我从不请求任何UserSettings变量,我根本不访问它们.

symfony doctrine-orm

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

doctrine-orm ×2

symfony ×2