延迟加载与学说一对一映射 [英] lazy loading with doctrine one to one mapping
问题描述
我很难为此找到正确的结果.
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 = ?
其他类型的映射,如 OneToMany
和 ManyToOne
执行延迟加载,但在一对一映射的情况下,我无法配置为延迟加载.我怎样才能延迟加载这种关系?我使用的是学说 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屋!