延迟加载与学说一对一映射 [英] lazy loading with doctrine one to one mapping

查看:23
本文介绍了延迟加载与学说一对一映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很难为此找到正确的结果.

I am having a hard time finding the correct result for this.

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

I have one to one mapping. There are two tables:

/**
* @ORMTable(name="users")
* @ORMEntity
*/
class Users {

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

   //getters and setters
}

/**
* @ORMTable(name="notifications_settings")
* @ORMEntity
*/
class UsersSettings {

   /**
   * @var Users
   *
   * @ORMOneToOne(targetEntity="Users", inversedBy="userSetting")
   * @ORMJoinColumns({
   *   @ORMJoinColumn(name="user_id", referencedColumnName="id")
   * })
   */
   private $user;
}

每当我按如下方式获取实体一时:

Whenever I fetch entity one as below:

$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();

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

Doctrine immediately performs join to usersSettings entity which I dont want:

SELECT t0.id AS id1, t0.username AS username2, t0.email AS email3, t0.password AS password4, t29.id AS id30, t29.is_notify_by_email ASis_notify_by_email31, t29.user_id AS user_id32 FROM users t0 LEFT JOINusers_settings t29 ON t29.user_id = t0.id WHERE t0.id = ?

SELECT t0.id AS id1, t0.username AS username2, t0.email AS email3, t0.password AS password4, t29.id AS id30, t29.is_notify_by_email AS is_notify_by_email31, t29.user_id AS user_id32 FROM users t0 LEFT JOIN users_settings t29 ON t29.user_id = t0.id WHERE t0.id = ?

其他类型的映射,如 OneToManyManyToOne 执行延迟加载,但在一对一映射的情况下,我无法配置为延迟加载.我怎样才能延迟加载这种关系?我使用的是学说 2.3 和 Symfony 2.1

Other types of mapping like OneToMany and ManyToOne performs lazy loading but in case of one to one mapping, I could not configure to lazy load. How can I lazy load this relation? I am using doctrine 2.3 and Symfony 2.1

推荐答案

使用提示 HINT_FORCE_PARTIAL_LOAD 避免延迟加载.

Use hint HINT_FORCE_PARTIAL_LOAD to avoid lazy-loading.

...
$qb->getQuery()->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true);

这篇关于延迟加载与学说一对一映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆