为了更好地理解,我将简单地介绍上下文。
我有一个具有BankAccount关系的用户实体。
在这里,我的用户类:
/**
* User
*
* @ORM\Table(name="fos_user")
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
*/
class User extends BaseUser
{
// [...]
/**
* @ORM\OneToOne(targetEntity="AppBundle\Entity\BankAccount", mappedBy="customer")
*/
private $bankAccount;
// [...]
}
我的银行帐户类:
/**
* BankAccount
*
* @ORM\Table(name="bank_account")
* @ORM\Entity
* @DoctrineAssert\UniqueEntity({"iban"})
* @DoctrineAssert\UniqueEntity({"mandateRef"})
* @ORM\HasLifecycleCallbacks
*/
class BankAccount
{
// [...]
/**
* @var User
*
* @ORM\OneToOne(targetEntity="AppBundle\Entity\User", inversedBy="bankAccount")
* @ORM\JoinColumn(name="customer_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $customer;
// [...]
}
我想创建一个过滤器表单,该表单将成为具有一些orderBy语句的用户的基本实体类型。我将使用query_builder选项:
->add('customer', null, array(
'query_builder' => function (UserRepository $er) {
return $er->createQueryBuilder('u')
->select('u')
->orderBy('u.firstname, u.lastname, u.username')
;
},
'property' => 'fullnameWithUsername',
))
这将为每个用户生成很多由doctrine制作的BankAccount选择:
如果我停用了查询构建器,则不再需要选择其他选项,但我们在用户选择时有一个左连接:
所以解决办法可能是按照here所述在我的查询构建器上手动添加连接语句,但我认为它非常难看,顺便说一下,我绝对不需要用户和#39;此表格的银行帐户。
所以我的问题是:如何告诉Doctrine并不总是试图获取用户的银行帐户关系?
注意:我已经在两个实体上尝试了所有提取选项,但无法正常工作。
感谢您的帮助!
答案 0 :(得分:0)
如果您将OneToOne关系更改为OneToMany(即使它确实不是),Doctrine将停止加载银行帐户实体。
很脏,但据我所知,除此之外别无他法。